2013-02-15 56 views
1

我想用我的程序撥打電話,然後識別通話狀態。我想要檢測外出鈴聲的結束。如何檢測出局鈴聲結束?

如何檢測出局鈴聲結束?

我使用流程代碼進行調用。

EditText ed = (EditText) findViewById(R.id.txtcall);   
Uri uri = Uri.fromParts("tel", ed.getText().toString(), null); 
callIntent = new Intent(Intent.ACTION_CALL,uri); 
startActivity(callIntent); 

回答

0

檢查由本: - 你將能夠調用用戶

Intent callIntent = new Intent(Intent.ACTION_CALL); 
callIntent.setData(Uri.parse("tel:+9189745847")); 
startActivity(callIntent); 

,並在AndroidManifest.xml文件還使用:

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

非常感謝。我想檢測傳出鈴聲結束。我可以做到這一點嗎? – 2013-02-15 07:36:15

0

看一看意圖NEW_OUTGOING_CALL

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

然後你可以檢查t他通話的狀態與PhoneStateListener:

public class OutgoingCallReceiver extends BroadcastReceiver { 

protected static final String CLASS_TAG = "OutgoingCallReceiver : "; 

@Override 
public void onReceive(Context context, Intent intent) { 
    Bundle bundle = intent.getExtras(); 
    if(null == bundle) return; 

    String phonenumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
    Log.i(LOG_TAG, CLASS_TAG + "phone number " + phonenumber); 

     final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     tm.listen(new PhoneStateListener() { 
      @Override 
      public void onCallStateChanged(int state, String incomingNumber) { 
       switch (state) { 
       case TelephonyManager.CALL_STATE_RINGING: 
        Log.d(LOG_TAG, CLASS_TAG + "RINGING"); 
        break; 
       case TelephonyManager.CALL_STATE_OFFHOOK: 
        Log.d(LOG_TAG, CLASS_TAG + "OFFHOOK"); 
        Process.onCallStateIsOFFHOOK(); 
        break; 
       case TelephonyManager.CALL_STATE_IDLE: 
        Process.onCallStateIsIDLE(); 
        Log.d(LOG_TAG, CLASS_TAG + "IDLE"); 
        break; 
       default: 
        Log.d(LOG_TAG, CLASS_TAG + "Default: " + state); 
        break; 
       } 
      } 
     }, PhoneStateListener.LISTEN_CALL_STATE); 
    } 
} 

在Process類,你可以檢測鈴聲和創造更多像CALLBEGINS狀態,通過記錄VOICE_CALL CALLANSWERED。 onCallStateIsIDLE()的 例子:

public void onCallStateIsIDLE() { 
    setSpeakingOn(false); 
    if (stateCall == STATE_CALLANSWERED || 
      stateCall == STATE_CALLBEGINS || 
      stateCall == STATE_DIALISOFFHOOK || 
      stateCall == STATE_DIALENDREQUESTED) { 
     Log.i(LOG_TAG, CLASS_TAG + " - forcing state : STATE_DIALREADY : old state = " + stateCall); 
     stateCall = STATE_DIALREADY; 
    } 
} 
+0

請詳細解釋流程類。 – 2013-02-15 14:17:41

1

下面的代碼片段可以幫助你找到電話當前是否雕像拿起它,振鈴或空閒。您可以輕鬆使用這些狀態並相應地實現您的功能。

private class CustomPhoneStateListener extends PhoneStateListener 
{   
      @Override 
      public void onCallStateChanged(int state, String incomingNumber) 
      { 
       super.onCallStateChanged(state, incomingNumber); 

       //TelephonyManager.CALL_STATE_IDLE 
       //TelephonyManager.CALL_STATE_OFFHOOK 
       //TelephonyManager.CALL_STATE_RINGING 
      } 
} 
+0

請給我一些更多的解釋 – 2013-02-15 14:16:38

+0

只需撥打電話,然後,每當你發現呼叫狀態是CALL_STATE_IDLE,意味着其被拒絕或鈴聲結束在另一邊。 – 2013-02-18 08:48:25