J'écris une application qui écoute les SMS entrants. J'ai vérifié beaucoup de questions et de réponses en ligne mais ça ne marche toujours pas. Mes codes:Récepteur SmsBroadcast ne fonctionne pas
Mon AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="superapp.networkapp">
<!--send and read SMS-->
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".activity.MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait">
</activity>
<receiver android:name=".utility.tool.SmsReceiver" >
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<activity
android:name=".activity.StartTestActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
tools:replace="screenOrientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Mon Utilitaire/Outils/SmsReceiver.java
package superapp.networkapp.utility.tool;
import ...
public class SmsReceiver extends BroadcastReceiver {
//referenced from https://stackoverflow.com/questions/7089313/android-listen-for-incoming-sms-messages
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.d("SMS", "onReceive: ");
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] messages = null;
String sender;
if (bundle != null) {
//---retrieve the SMS message received---
try {
Object[] pdus = (Object[]) bundle.get("pdus");
if (pdus != null) {
messages = new SmsMessage[pdus.length];
for(int i=0; i<messages.length; i++){
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]); //TODO
sender = messages[i].getOriginatingAddress();
String msgBody = messages[i].getMessageBody();
Toast.makeText(context,"Message: "+ msgBody + " from " + sender,Toast.LENGTH_LONG).show();
}
}
} catch(Exception e){
e.printStackTrace();
}
}
}
}
}
Je fonction askPermissions()
en cours d'exécution dans l'exécution
private static final List<String> permissions = Arrays.asList(
Manifest.permission.SEND_SMS,
Manifest.permission.READ_SMS,
Manifest.permission.RECEIVE_SMS);
private void askPermissions() {
if (!hasAllPermissions())
ActivityCompat.requestPermissions(this, permissions.toArray(new String[0]), 69);
}
private boolean hasPermission(String permission) {
return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED;
}
private boolean hasAllPermissions() {
for (String permission : permissions) {
if (!hasPermission(permission)) return false;
}
return true;
}
J'ai 3 appareils: Un Samsung S7 et un Sony Xperia Z5 Compact à la fois en utilisant Android 7.0, et un Samsung S6 en utilisant Android 6.0.1. Lorsque j'envoie des messages à ces appareils, seules les applications de messagerie par défaut affichent les notifications.
J'ai vérifié les réponses et les questions d'autres personnes. Il semble que les applications de messagerie par défaut aient une priorité intentFilter
supérieure ou appellent abortBroadcast()
. J'ai également défini la priorité de mon intention d'être le plus grand nombre entier ou 999 tel que défini dans la documentation Android, mais pas de chance pour le moment.
Avez-vous encore inscrit récepteur? –
Oui. Je l'enregistre dans mon AndroidManifest. Xml –
J'ai également essayé d'enregistrer le récepteur par programmation, mais pas de chance encore. –