2013-03-18 24 views
1

我正在使用以下廣播接收器來檢索撥出的電話號碼。在android中檢索當前撥出的電話號碼時得不到正確的值

@Override 
public void onReceive(Context context, Intent intent) { 
    mContext = context; 
    mIntent = intent; 
    TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
    int events = PhoneStateListener.LISTEN_CALL_STATE; 
    tm.listen(phoneStateListener, events); 
} 

private final PhoneStateListener phoneStateListener = new PhoneStateListener() { 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 



     switch (state) { 
     case TelephonyManager.CALL_STATE_IDLE: 

      break; 

     case TelephonyManager.CALL_STATE_OFFHOOK: 


       dialingNumber = mIntent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
       Toast.makeText(mContext, "Local Call Number- " + dialingNumber,Toast.LENGTH_SHORT).show(); 


       break; 
      } 
       return; 
     } 



     Log.i(">>>Broadcast", "onCallStateChanged " + callState); 
     super.onCallStateChanged(state, incomingNumber); 
    } 
}; 

有時它返回null或數我叫before.Is有另一種方法來檢索當前呼叫的呼入/呼出的電話號碼?

回答

12

撥出電話,使用:

清單:

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

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

代碼:

... 
@Override 
public void onReceive(final Context context, final Intent intent) { 
    Log.d("APP", "ACTION:" + intent.getAction()); 

    if (Intent.ACTION_NEW_OUTGOING_CALL.equals(intent.getAction())) { 
     final String originalNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
     Log.d("APP", "outgoing,ringing:" + originalNumber); 
    } 
    ... 

來電,使用:

清單:

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

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

代碼:

@Override 
public void onReceive(final Context context, final Intent intent) { 
    Log.d("APP", "ACTION:" + intent.getAction()); 
    final String stringExtra = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
    if (TelephonyManager.EXTRA_STATE_RINGING.equals(stringExtra)) { 
      final String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
      Log.d("APP", "incoming,ringing:" + incomingNumber); 
     } else if (stringExtra.equals(TelephonyManager.EXTRA_STATE_IDLE)) { 
      final String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
      Log.d("APP", "hanged" + incomingNumber); 
     } else if (stringExtra.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { 
      final String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
      Log.d("APP", "answered" + incomingNumber); 
     } 
    } 
+0

我們怎樣才能知道呼叫結束? – 2014-12-11 05:14:59

+1

@MdMohsin對於傳入和傳出的呼叫,你都可以看到有一段文字是我寫的「絞死」。 – 2014-12-11 06:17:30

+0

Okk先生..還有一個問題,如果你不介意。我使用傳出和傳入呼叫接收器,但它有時火,有時不..即使我使用意向過濾優先級在androidmanifast.xml – 2014-12-11 06:39:37

相關問題