Intereting Posts
Как вы управляете пользовательской документацией для приложения для Android? Помощник IAB не настроен. Невозможно выполнить операцию: queryInventory Facebook SDK v4 LoginButton игнорирует настройки XML Задержка видеопотока RTSP Как сделать замену через веб-страницы, загруженные в Webview Android – проблемы с регистрацией задержки запуска Android Volley – BasicNetwork.performRequest: неожиданный код ответа 400 Android «входной ключ оболочки adb keyevent KEYCODE_SEARCH» Не работает Android: установите флажки check checked Завершение курсора, который не был деактивирован или закрыт нефатальной ошибкой Установить выравнивание текста в центре в spinner в android Разница между приложением для приложений для Android и телефоном Мне нужно восстановить все переменные onResume? Почему в последних приложениях нет скриншотов, когда финская активность в firebase onAuthStateChanged Первоначально скрытый элемент меню не отображается, когда вызывается SetVisible (true)

Как получить номер телефона от входящего звонка?

Как получить номер телефона при поступлении входящего звонка в Android?

Solutions Collecting From Web of "Как получить номер телефона от входящего звонка?"

Сделайте Broadcast receiver , чтобы ServiceReceiver назначил его действие в манифесте.

 <receiver android:name=".ServiceReceiver" > <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </receiver> 

Добавьте PhoneStateListener в TelephonyManager, PhoneStateListener, переопределив onCallStateChanged() с параметром входящего номера. Это оно.

ServiceReceiver.Java

 public class ServiceReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); telephony.listen(new PhoneStateListener(){ @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); System.out.println("incomingNumber : "+incomingNumber); } },PhoneStateListener.LISTEN_CALL_STATE); } } 

Следующее решение помогло мне получить входящие и исходящие номера телефонов.

Что нужно включить в манифест :

1) Разрешение:

 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> 

2) широковещательный приемник:

 <receiver android:name=".AnswerCallBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver> 

Что нужно включить в класс BroadcastReceiver :

  public class AnswerCallBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent arg1) { if(arg1.getAction().equals("android.intent.action.PHONE_STATE")){ String state = arg1.getStringExtra(TelephonyManager.EXTRA_STATE); if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){ Log.d(TAG, "Inside Extra state off hook"); String number = arg1.getStringExtra(TelephonyManager.EXTRA_PHONE_NUMBER); Log.e(TAG, "outgoing number : " + number); } else if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)){ Log.e(TAG, "Inside EXTRA_STATE_RINGING"); String number = arg1.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); Log.e(TAG, "incoming number : " + number); } else if(state.equals(TelephonyManager.EXTRA_STATE_IDLE)){ Log.d(TAG, "Inside EXTRA_STATE_IDLE"); } } } } 

Пожалуйста, обратитесь к этому вопросу: Получить номер телефона входящего звонка в Android

А также посмотрите на этот ответ: как мне получить номер телефона от входящего звонка?

Вы можете найти решение здесь

 Bundle bundle = intent.getExtras(); String phoneNr= bundle.getString("incoming_number"); 

Это будет демонстративно помочь вам.

Вот реализация, которая позволит вам получить номер телефона, если он является входящим телефонным звонком в качестве входящего номера, а также когда звонок ЗАВЕРШЕН – обратите внимание на код Handler ().

 private class PhoneCallListener extends PhoneStateListener { private boolean isPhoneCalling = false; @Override public void onCallStateChanged(int state, String incomingNumber) { if (TelephonyManager.CALL_STATE_RINGING == state) { // phone ringing Log.i(LOG_TAG, "RINGING, number: " + incomingNumber); } if (TelephonyManager.CALL_STATE_OFFHOOK == state) { // active Log.i(LOG_TAG, "OFFHOOK"); isPhoneCalling = true; } if (TelephonyManager.CALL_STATE_IDLE == state) { // run when class initial and phone call ended, need detect flag // from CALL_STATE_OFFHOOK Log.i(LOG_TAG, "IDLE number"); if (isPhoneCalling) { Handler handler = new Handler(); //Put in delay because call log is not updated immediately when state changed // The dialler takes a little bit of time to write to it 500ms seems to be enough handler.postDelayed(new Runnable() { @Override public void run() { // get start of cursor Log.i("CallLogDetailsActivity", "Getting Log activity..."); String[] projection = new String[]{Calls.NUMBER}; Cursor cur = getContentResolver().query(Calls.CONTENT_URI, projection, null, null, Calls.DATE +" desc"); cur.moveToFirst(); String lastCallnumber = cur.getString(0); } },500); isPhoneCalling = false; } } } 

Затем добавьте и инициализируйте слушателя в коде onCreate или onStartCommand:

  PhoneCallListener phoneListener = new PhoneCallListener(); TelephonyManager telephonyManager = (TelephonyManager) this .getSystemService(Context.TELEPHONY_SERVICE); telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 

Используя принятый ответ, вы регистрируете нового слушателя при каждом изменении состояния вызова. Это приведет к нескольким вызовам onCallStateChanged для одного события.