2017-07-04 5 views
1

Wie kann ich zwischen eingehenden und ausgehenden Anrufen unterscheiden? für beide Fälle ist das Mobiltelefon in einem abgehobenen Zustand, aber für den ankommenden Anruf ist es im Rufzustand, geht dann zum abgehobenen,verschiedene Telefonstatus Differenzierung

Ich habe diesen Code versucht, aber es funktioniert nicht effektiv, als Eine Klingelvariable ist immer falsch. und es ist eine andere Frage, wie kann ich die abgehende Rufnummer .. Vielen Dank im Voraus

public class states extends BroadcastReceiver { 
boolean Ringing = false; 

public void onReceive(Context context, Intent intent) { 
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 

if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)) { 
Toast.makeText(context, "Ringing", Toast.LENGTH_SHORT).show(); 
     Ringing = true ; 
} 
    else if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)) { 
     if (Ringing) { 
      // do nothing 
     }else{ 
      // do something 
} 
else if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)) { 
     Ringing = false ; 
    } 
} 
} 

das sind meine Rechte

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
<uses-permission android:name="android.permission.CALL_PHONE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 


    <receiver android:name=".states"> 
     <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
      <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
     </intent-filter> 
    </receiver> 
+0

Für Ihre Frage ougoing Rufnummer bekommen, das bedeutet, dass Sie bereit sind, Ihre eigene Telefonnummer zu erhalten. nicht wahr? –

+0

Nein, ich meine die Nummer, die ich anrufe. – user8151481

+0

Ich habe gerade die Antwort bearbeitet und überprüfe den TelephonyManager.CALL_STATE_IDLE –

Antwort

0

Zur Unterscheidung von ein- und ausgehenden Anrufe bekommen Sie eine Broadcast-Receiver verwenden Dazu: fügen Sie <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> in Ihrem Empfänger und verarbeiten Sie es in Ihrer OnReceive() -Methode.

<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> 

Für die abgehende Nummer

public void onReceive(Context context, Intent intent) 
{ 
    String state=intent.getStringExtra(TelephonyManager.EXTRA_STATE); 

    if(state==null) 
    { 
     //Outgoing call 
     String number=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
     Log.i("tag","Outgoing number : "+number); 
    } 
    else if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) 
    { 
     //Incoming call 
     String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
     Log.i("tag","Incoming number : "+number); 
    } 
} 
+0

Ich versuchte dies, aber es gibt keine "Null" -Zustand, es ist entweder aus dem Stand oder im Leerlauf .. auch nachdem ich den Zustand geändert wurde, um zu sein (State.equals (TelephonyManager.EXTRA_STATE_OFFHOOK) || Zustand. (TelephonyManager.EXTRA_STATE_IDLE)) Ich habe die ausgehende Nummer nicht bekommen. – user8151481

+0

Zeige mir deine Berechtigungen –

+0

Es hat funktioniert ... Ich habe diese Erlaubnis hinzugefügt und es wurde der Null-Zustand und die ausgehende Nummer ... danke für deine Hilfe – user8151481

Verwandte Themen