Ich schreibe eine App, die eingehenden SMS hört. Ich habe viele Fragen und Antworten online überprüft, aber es funktioniert immer noch nicht. Meine Codes:SmsBroadcast Empfänger funktioniert nicht
Mein 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>
Mein Zubehör/Tools/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();
}
}
}
}
}
Ich habe askPermissions()
Funktion im laufenden Betrieb läuft
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;
}
Ich habe 3 Geräte: Ein Samsung s7 und ein Sony Xperia Z5 Compact beide mit Android 7.0 und ein Samsung s6 mit Android 6.0.1. Wenn ich Nachrichten an diese Geräte sende, zeigen nur die Standard-Messenger-Apps die Benachrichtigungen an.
Ich habe die Antworten und Fragen anderer Leute überprüft. Es scheint, als hätten die Standard-Messenger-Apps eine höhere Priorität intentFilter
oder sie rufen abortBroadcast()
an. Ich habe auch die Priorität meiner Absicht gesetzt, die größte Ganzzahl oder 999 zu sein, wie in der Android-Dokumentation definiert, aber noch kein Glück.
Haben Sie Empfänger noch registriert? –
Ja. Ich registriere es in meinem AndroidManifest. Xml –
Ich habe auch versucht, den Empfänger programmatisch zu registrieren, aber kein Glück noch. –