je l'manifest.xml suivante:Inscrivez-BroadcastReceiver dans le manifeste
<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>
L'auditeur reçoit des données alors que l'activité principale est en cours d'exécution. Cependant, lorsque l'activité principale est détruite, le récepteur s'arrête pour sortir des informations.
Le récepteur est un exemple de classe:
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;
}
}
}
}
Pour autant que je compris les principes android, lorsqu'un récepteur est enregistré dans le manifeste alors il devrait recevoir des données, même si son application est tué, si oui, quel est-ce que je fais mal?
addint activé et cela n'a pas aidé exporté. Puis-je demander comment suis-je censé lancer manuellement une activité avant d'enregistrer l'auditeur, puisqu'il est enregistré dans le manifeste, et fonctionne également pendant que l'application n'est pas tuée? merci d'avance –
Eh bien, je ne veux pas dire que vous devez lancer l'application avant de vous inscrire. Ce que j'ai compris du lien dans ma réponse, c'est que vous devez avoir lancé votre application au moins une fois avant que le récepteur de diffusion ne fonctionne. Donc, après le lancement, puis la fermeture de l'application une fois, le récepteur devrait fonctionner. Regardez le lien que j'ai fourni dans ma réponse car votre problème semble assez similaire. Je ne vois aucun problème avec votre code. – REG1
J'ai compris la même chose au début mais ça ne marche pas comme ça. Peu importe combien de fois je le lance, il ne fonctionne que pendant que l'application fonctionne. –