Sobes.tech
Junior — Middle

Чӣ гуна иҷрои зангҳои воридотӣ ва содиротиро дар платформаи Android амалӣ кардан мумкин аст?

sobes.tech AI

Ҷавоб аз AI

Дар Android, зангҳои воридотӣ ва хориҷӣ тавассути APIҳои стандартии платформа идора карда мешаванд.

Зангҳои хориҷӣ: Барои анҷом додани занги хориҷӣ, шумо метавонед Intent-ро бо амали Intent.ACTION_CALL ё Intent.ACTION_DIAL истифода баред.

  • ACTION_DIAL барномаи телефонро бо рақам мекушояд, аммо зангро автоматӣ намекунад.
  • ACTION_CALL фавран зангро оғоз мекунад, аммо иҷозатномаи CALL_PHONE-ро талаб мекунад.

Маслиҳат барои код барои занги хориҷӣ:

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:+1234567890"));
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
    context.startActivity(callIntent);
} else {
    // Иҷозатро аз корбар талаб кунед
}

Зангҳои воридотӣ: Барои коркарди зангҳои воридотӣ, бояд TelephonyManager ва PhoneStateListener ё BroadcastReceiver-ро барои пайгирии ҳолати занг истифода баред.

Маслиҳат бо PhoneStateListener:

TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener callStateListener = new PhoneStateListener() {
    @Override
    public void onCallStateChanged(int state, String phoneNumber) {
        switch (state) {
            case TelephonyManager.CALL_STATE_RINGING:
                // Занги воридотӣ
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                // Занг фаъол аст
                break;
            case TelephonyManager.CALL_STATE_IDLE:
                // Занг тамом ё ҳеҷ занг нест
                break;
        }
    }
};
telephonyManager.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE);

Барои коркарди пурра бо зангҳо, эҳтимолан иҷозатҳои иловагӣ, масалан, READ_PHONE_STATE, лозим аст.

Муҳим аст, ки аз Android 6.0 (API 23) ба баъд, бояд иҷозатҳоро дар вақти иҷро аз корбар пурсед.