Ich habe folgendes manifest.xml:Register Broadcastreceiver in manifest
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<receiver android:name=".PhoneStateBroadcastReceiver"
android:permission="android.permission.READ_PHONE_STATE">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Der Zuhörer empfängt Daten, während die Haupttätigkeit ausgeführt wird. Wenn jedoch die Hauptaktivität beendet wird, hört der Empfänger auf, Informationen auszugeben.
Der Empfänger ist ein Beispiel Klasse:
public class PhoneStateBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "PhoneReceiver";
Context mContext;
String incoming_number;
private int prev_state;
@Override
public void onReceive(Context context, Intent intent) {
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); //TelephonyManager object
CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener();
telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE); //Register our listener with TelephonyManager
Bundle bundle = intent.getExtras();
String phoneNr = bundle.getString("incoming_number");
Log.v(TAG, phoneNr);
Log.d(TAG, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
mContext = context;
}
/* Custom PhoneStateListener */
public class CustomPhoneStateListener extends PhoneStateListener {
private static final String TAG = "CustomStateListener";
@Override
public void onCallStateChanged(int state, String incomingNumber){
if(incomingNumber != null && incomingNumber.length() > 0)
incoming_number = incomingNumber;
switch(state){
case TelephonyManager.CALL_STATE_RINGING:
Log.d(TAG, "CALL_STATE_RINGING");
prev_state=state;
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d(TAG, "CALL_STATE_OFFHOOK");
prev_state=state;
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.d(TAG, "CALL_STATE_IDLE==>"+incoming_number);
if((prev_state == TelephonyManager.CALL_STATE_OFFHOOK)){
prev_state=state;
//Answered Call which is ended
}
if((prev_state == TelephonyManager.CALL_STATE_RINGING)){
prev_state=state;
//Rejected or Missed call
}
break;
}
}
}
}
Soweit ich die Android-Prinzipien verstanden, wenn ein Empfänger in einem offenkundigen registriert ist, dann sollte es Daten empfangen, auch wenn seine App getötet wird, wenn ja, welche mache ich falsch?
addint aktiviert und half nicht exportiert. Darf ich fragen, wie ich manuell eine Aktivität starten soll, bevor ich den Listener registriere, da er im Manifest registriert ist und auch funktioniert, während die App nicht beendet wird? vielen Dank im Voraus –
Nun, ich meine nicht, dass Sie die App vor der Registrierung starten müssen. Was ich aus dem Link in meiner Antwort verstanden habe, ist, dass du deine App mindestens einmal gestartet haben musst, bevor der Broadcast-Empfänger arbeiten wird. Nach dem Starten und anschließenden Schließen der App sollte der Empfänger also funktionieren. Sehen Sie sich den Link an, den ich in meiner Antwort angegeben habe, da Ihr Problem ziemlich ähnlich zu sein scheint. Ich sehe keine Probleme mit Ihrem Code. – REG1
Ich habe das gleich verstanden, aber so funktioniert es nicht. Egal wie oft ich es starte funktioniert es nur, während die App läuft. –