2016-09-01 2 views
-1

В моем приложении я вызываю некоторые номера телефонов прогматически. есть ли способ, которым я могу проверить, будет ли звуковой сигнал вызова, и установлено соединение для обеспечения действительности номера телефона и завершения вызова перед тем, как поднять.Проверьте состояние телефона телефона Android

ответ

0

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> 

Затем добавьте следующий код в приемник вещания

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"); 
      } 
     } 
    } 
} 
0

Попробую угадать ваш код, потому что вы не дали мне никакого ключа :(

Для того, чтобы получить телефонный звонок заявляет, вы должны добавить слушателя к Telephony Manager.

создать класс слушателя:

// Or just make new PhoneStateListener() and override onCallStateChanged 
public class PhoneCallListener extends PhoneStateListener { 

    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 

     if (state == TelephonyManager.CALL_STATE_RINGING) { 
      //A new call arrived and is ringing or waiting. In the latter case, another call is already active 
     } 

     if (state == TelephonyManager.CALL_STATE_OFFHOOK) { 
      //At least one call exists that is dialing, active, or on hold, and no calls are ringing or waiting 
     } 

     if (state == TelephonyManager.CALL_STATE_IDLE) { 
      //No activity 
     } 
    } 
} 

Добавить слушатель:

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

После прослушивания состояния телефонного вызова, вы должны начать телефонный звонок себя так, как, что:

Intent callIntent = new Intent(Intent.ACTION_CALL); 
CallInfo callInfo = new CallInfo(PHONE_NUMBER); 
callIntent.setData(Uri.parse("tel:" + callInfo.getDialTo())); 
//** Check for permision **// 
startActivity(callIntent); 

Для того, чтобы это произошло правильно, вы должны получить разрешение на выполнение вызова и прослушивание состояний телефонных вызовов, поэтому добавьте следующие разрешения для вашего манифеста. xml:

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