我尝试在我的应用程序中监控传入的短信。在 Android 方面,他们对 Monitoring 从API 19传入的 SMS 做了一些更改。
无法在API 23中在后台跟踪传入消息(在应用程序不在后台和移动屏幕处于关闭状态时) 。
在 Android 文档中,如果您的应用不是来自API 19的默认消息应用,则无法在后台跟踪传入的短信。
但它适用于我的API 21(棒棒糖)设备。它不适用于API 23(Marshmallow)设备。当设备屏幕打开或应用程序打开时意味着它也在API 23(Marshmallow)中工作。
能否请您更新我是否有任何方法可以在API 23(Marshmallow)中在后台跟踪传入消息。
清单代码
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<receiver
android:name=".SMSReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="5822">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
这里是我的 Java 代码
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.telephony.SmsMessage;
public class SMSReceiver extends BroadcastReceiver {
public static final String BROADCAST = "SMS_RECEIVER";
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
Intent broadcast_intent;
String message_body = "", originAddress;
StringBuilder bodyText;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equalsIgnoreCase(SMS_RECEIVED)) {
broadcast_intent = new Intent(BROADCAST);
Bundle bundle = intent.getExtras();
SmsMessage[] messages;
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
messages = new SmsMessage[pdus.length];
bodyText = new StringBuilder();
for (int i = 0; i < messages.length; i++) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
String format = bundle.getString("format");
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i], format);
} else {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
originAddress = messages[i].getOriginatingAddress().toUpperCase();
bodyText.append(messages[i].getMessageBody());
}
message_body = bodyText.toString();
}
}
}
}