2011-12-17 21 views
0

TelephonyManager.CALL_STATE_RINGINGまたはCALL_STATE_IDLEのようなアンドロイドの着信状況を検出できる方法はありますか?
着信コールに応答した場合、TELEPHONY MANAGER APIのステータスは何ですか
着信コールが応答されなかった場合は、TELEPHONY MANAGER APIのステータスはどうなりますか?
この問題に関しては、誰でも助けてくれますか?
アドバンスandroidの着信状態を検出する方法

答えて

2

のおかげで通話がACTION_ANSWER意図を処理するためにBroadcastReceiverを作成する必要になったときの状態を取得します。

ACTION_PHONE_STATE_CHANGEDにはBroadcastReceiverを追加し、TelephonyManagerコール状態の変更を監視することもできます。私は、通話中または通話中に通話ステータスの動作が完全にわからないが、BroadcastReceiverを使用してかなりすぐに試すことができます。

AndroidManifest.xmlに受信者を登録することを忘れないでください。

+3

を.permission.READ_PHONE_STATE – Gubatron

6

これは私が

マニフェストファイルやったことです:私はあなたに別のGoogle アンドロイドを救う私のBroadcastReceiver(IncomingCallReceiver)で

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

フィールド

private static String previousCallingNumber = null; 
private static String previousState = null; 
private String RINGING = TelephonyManager.EXTRA_STATE_RINGING; 
private String OFFHOOOK = TelephonyManager.EXTRA_STATE_OFFHOOK; 
private String IDLE = TelephonyManager.EXTRA_STATE_IDLE; 

public void onReceive(final Context context,Intent intent) { 


    final Bundle extras = intent.getExtras(); 
    String state= null; 

    if (extras != null) 
    { 
     state = extras.getString(TelephonyManager.EXTRA_STATE); 
    } 

    /** 
     * This part of the code records that a call was recieved/attended or missed. 
     * 
     */ 
     else if (state!=null && state.equals(OFFHOOOK)) 
     { 

      if(previousState!=null) 
      { 

         if(previousState.equals(RINGING) && previousCallingNumber!=null) 
         { 
          /** 
          * received call, the ringing call has been attended. 
          */ 
         String msisdn = MSISDNPreFixHandler.fixMsisdn(previousCallingNumber); 


         Log.i("IncomingCallReceiver", "Incoming Received Call Saved: "+msisdn); 


         } 

      } 
      /** 
      * Else the Incoming Call receiver is triggered when an outgoing call is made. 
      * 
      */ 

     } 
     else if (state!=null && state.equals(IDLE)) 
     { 

       String incomingNumberForMissedCall = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
       String msisdn = MSISDNPreFixHandler.fixMsisdn(incomingNumberForMissedCall); 

       if(incomingNumberForMissedCall!=null) 
       {      
        /** 
        * missed call, the ringing call has been missed. 
        */ 



        Log.i("IncomingCallReceiver", "Missed Call Saved: "+msisdn); 


       } 

     } 


    /** 
    * Very important to keep the previous state & number in cache , 
    * as through it we can recognize the received attended call. 
    * 
    */ 

    previousState = state; 
    previousCallingNumber = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
} 
関連する問題