как определить входящий и исходящий звонок в андроиде - PullRequest
12 голосов
/ 20 сентября 2011

Как получить события входящего и исходящего звонка в Android отдельно.На самом деле я пытался разработать приложение, которое открывается при входящем звонке, если номер существует в базе данных, и он работает нормально.но если я звоню с устройства (исходящий звонок) и если номер существует в базе данных, все равно он открывает мое приложение.я хочу ограничить открытие моей заявки на исходящий вызов.

мой манифест содержит входящий вызов, подобный этому:

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

IncomingCallReceiver:

MyPhoneStateListener phoneListener=new MyPhoneStateListener(context);
TelephonyManager telephony = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);

MyPhoneStateListener:

public void onCallStateChanged(int state,String incomingNumber){
      switch(state) {
          case TelephonyManager.CALL_STATE_IDLE:
              Log.d("DEBUG", "IDLE");
          break;
          case TelephonyManager.CALL_STATE_OFFHOOK:
              Log.d("DEBUG", "OFFHOOK");                        
              Intent i = new Intent(context, MyMainActivity.class);
              i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              context.startActivity(i);
          break;
          case TelephonyManager.CALL_STATE_RINGING:
              Log.d("DEBUG", "RINGING");
          break;
    }
}

Может ли кто-нибудь помочь мне отличить исходящий вызов от входящего вызова, поэтому я буду обрабатывать эти события.

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 20 сентября 2011

я хочу ограничить открытие моего приложения при исходящем звонке.

при case TelephonyManager.CALL_STATE_OFFHOOK: проверьте, было ли предыдущее состояние CALL_STATE_RINGING или CALL_STATE_IDLE (например, с помощью настроек aразличный флаг в обоих случаях).
В последнем случае продолжите открывать ваше приложение, иначе ничего не делайте

4 голосов
/ 20 сентября 2011

добавьте <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> в ваш приемник и обработайте его вашим onReceive() методом.

<receiver android:name=".IncomingCallReceiver" >
    <intent-filter >             
       <action android:name="android.intent.action.PHONE_STATE" />
       <action android:name="android.intent.action.NEW_OUTGOING_CALL" />             
    </intent-filter>
</receiver>
0 голосов
/ 13 мая 2015

Действие намерения android.intent.action.NEW_OUTGOING_CALL обрабатывает исходящие вызовы, но для входящего вызова я предлагаю проверить это следующим образом:

if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
        //outgoing call
} else if (intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER) != null) {
        //incoming call
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...