Android BroadcastReceiver semble avoir cessé de travailler
-
25-09-2019 - |
Question
Je travaille actuellement sur une application qui utilise un broadcastreceiver
pour vérifier les messages texte entrants, mais tout à coup il semble avoir cessé de travailler, j'ai même écrit une petite application de test qui, du moins pour moi, semble syntaxiquement correct , mais aussi ne fonctionne pas.
Voici le code du projet de test:
Le manifeste:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.AGApplications.test"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".test"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MsgMon">
<intent-filter>
<action android:name=
"android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.RECEIVE_SMS">
</uses-permission>
<uses-sdk android:minSdkVersion="8" />
</manifest>
Le BroadcastReceiver:
package com.AGApplications.test;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class MsgMon extends BroadcastReceiver{
@Override
//Called when new message is received
public void onReceive(Context context, Intent intent) {
Log.d("PHONE", "Message Received");
}
}
Et l'activité principale:
package com.AGApplications.test;
import android.app.Activity;
import android.os.Bundle;
public class test extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Pour autant que je peux dire que je ne fais rien de mal, mais il est évident que je suis!
La solution
Alors j'ai découvert la question. Vous ne pouvez pas utiliser « PHONE » comme une balise de débogage. Ne me demandez pas pourquoi, je ne peux pas sembler comprendre, mais après avoir utilisé plusieurs balises différentes, « PHONE » était le seul qui ne serait pas enregistrée.
Mon bug semble être ailleurs et je suis sur la piste à nouveau! Merci à tous pour votre aide!
Autres conseils
Tout semble ok pour moi, je l'ai fait même exemple
voici mon code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.infostretch.broadcastex"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name="broadcastex" android:label="@string/app_name"><intent-filter><action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
</manifest>
public class broadcastex extends BroadcastReceiver {
/** Called when the activity is first created. */
private static final String TAG = "smsfwd";
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "Intent recieved: " + intent.getAction());
Log.i(TAG, "Message recieved: " + messages[0].getMessageBody());
if (messages.length > -1) {
Log.i(TAG, "Message recieved: " + messages[0].getMessageBody());
}
}
ce code fonctionne pour moi dans Android 2.1 un essai je pense que tout est comme vous