Sobes.tech
Junior — Middle

Kaip įgyvendinti įeinančius ir išeinančius skambučius Android platformoje?

sobes.tech AI

Atsakymas iš AI

Android naudojami standartiniai API skambučiams įeinantiems ir išeinantiems skambučiams:

Išeinantys skambučiai: Išeinantį skambutį galima inicijuoti naudojant Intent Intent.ACTION_CALL arba Intent.ACTION_DIAL:

  • ACTION_DIAL atveria telefono programėlę su numeriu, bet automatiškai nepadaro skambučio:
  • ACTION_CALL iš karto pradeda skambutį, bet reikalauja CALL_PHONE leidimo:

Pavyzdinis kodas išeinančiam skambučiui:

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 {
    // Prašyti leidimo naudotojo
}

Įeinantys skambučiai: Įeinančių skambučių apdorojimui reikia naudoti TelephonyManager ir PhoneStateListener arba BroadcastReceiver, kad stebėti skambučio būseną:

Pavyzdys naudojant 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:
                // Įeinantis skambutis
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                // Skambutis aktyvus
                break;
            case TelephonyManager.CALL_STATE_IDLE:
                // Skambutis baigtas arba nėra
                break;
        }
    }
};
telephonyManager.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE);

Gali būti reikalingi papildomi leidimai, pvz., READ_PHONE_STATE:

Svarbu pažymėti, kad Android 6.0 (API 23) ir naujesnėse versijose leidimai turi būti prašomi vartotojo veiksmų metu.