/ / Telefonnummer im Call-End-Broadcast-Empfänger erhalten? - Android, Android-Absicht, Broadcast-Empfänger

Holen Sie sich die Telefonnummer in Call End Broadcast Receiver? - Android, Android-Absicht, Broadcast-Empfänger

Ich entwickle eine Anwendung, die Serien machtvon Anrufen nacheinander. Um festzustellen, dass der Anruf beendet wurde, habe ich Broadcast Receiver erstellt, der erfolgreich ausgelöst wurde, wenn der Anruf beendet wird, aber ich kann die Telefonnummer nicht darin finden. Hier ist mein Code

public class EndCallReceiver extends BroadcastReceiver {

Preferences pref;
Context ctx;

@Override
public void onReceive(Context context, Intent intent) {

ctx = context;
pref = new Preferences(ctx);

Bundle extras = intent.getExtras();
if (extras != null) {
String state = extras.getString(TelephonyManager.EXTRA_STATE);
String incomingNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);


if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
Toast.makeText( ctx, incomingNumber, Toast.LENGTH_LONG).show();
}


}
}

}

In Toast wird nichts angezeigt. incomingNumber ist null. Kann mir jemand sagen. Wie kann ich die Telefonnummer innerhalb des Endanrufs BroadcastReceiver erhalten.

Antworten:

1 für die Antwort № 1

In deiner AndroidManifest.xml musst du die Übertragung registrieren:

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

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

Dein Code:

public class EndCallReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

Bundle bundle = intent.getExtras();
String phoneNumber= bundle.getString("incoming_number");
}

}

1 für die Antwort № 2

Das Problem ist, dass, wenn unten genannt wird, keine Telefonnummer zugeordnet ist.

if (state.equals(TelephonyManager.EXTRA_STATE_IDLE))

Probieren Sie den folgenden Code aus:

Wenn das Telefon klingelt, wird die Telefonnummer gespeichert und später beim Anruf wird getrennt, dann wird die vorherige Nummer angezeigt.

public class CallReceiver extends BroadcastReceiver {

static boolean isRinging = false;
String number = "";

@Override
public void onReceive(Context context, Intent intent) {
Log.v("ranjith", "entered onregister");
// Get the current Phone State
String phoneState = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

if (phoneState == null)
return;

// If phone is "Ringing"
if (phoneState.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
isRinging = true;
number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
Log.v("ranjith", "phone ringing");
}

// if phone is idle after ringing
if (phoneState.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
Log.v("ranjith", "call ended of number" + number);
Toast.makeText(context, "Number is " + number, Toast.LENGTH_LONG).show();
}
}
}