アプリで着信 SMS を監視しようとしています。Android 側から、 API 19からの受信 SMS を監視するためにいくつかの変更を行いました。
API 23で受信メッセージをバックグラウンドで追跡できません (アプリがバックグラウンドになく、モバイル画面がオフ状態のとき) 。
Android ドキュメントでは、アプリがAPI 19からの既定のメッセージ アプリではない場合、バックグラウンドで着信 SMS を追跡できないと述べています。
しかし、My API 21(LOLLIPOP)デバイスで動作しています。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();
}
}
}
}