gpt4 book ai didi

android - 重启后短信广播接收器不工作

转载 作者:IT老高 更新时间:2023-10-28 23:33:04 29 4
gpt4 key购买 nike

我正在尝试从短信中获取电话号码和电话簿名称。当我从应用程序运行它并关闭应用程序时,它可以工作,但是,当我重新启动手机时,它就不起作用了。有人吗?

public class IncomingSMSReceiver extends BroadcastReceiver {
private static final String queryString = "@zovi";
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";

public void onReceive(Context _context, Intent _intent) {
if (_intent.getAction().equals(SMS_RECEIVED)) {
Intent intent = new Intent(_context, IncomingSMSService.class);
_context.startService(intent);
Bundle bundle = _intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
for (SmsMessage message : messages) {
String msg = message.getMessageBody();
Log.i("Poruka", msg);
String to = message.getOriginatingAddress();
String contactName = TelefonUtils.getContact(_context, to);
Log.i("Od", contactName + "\n" + to);
}
}
}
}
}

我的 XML:

<receiver android:name=".telefon.receivers.IncomingSMSReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="500">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>

最佳答案

在您的AndroidManifest.xml尝试添加<action android:name="android.intent.action.BOOT_COMPLETED" /> IncomingSMSReceiver 下的操作接收者标签。

开始ServicesBroadcastReceiver Android系统重启或启动后自动注册一个BroadcastReceiver到安卓android.intent.action.BOOT_COMPLETED系统事件。

试试这个代码。

<receiver android:name=".telefon.receivers.IncomingSMSReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="500">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>

如果您尝试过 android.intent.action.BOOT_COMPLETED那么它不适用于您的情况,因为您忘记添加 BOOT_COMPLETED你的 Intent
IncomingSMSReceiver它仅在 android.provider.Telephony.SMS_RECEIVED 的情况下有效因为你在 IncomingSMSReceiver 中使用了 if 条件.所以从

改变 if 条件
if (_intent.getAction().equals(SMS_RECEIVED)) {

if (_intent.getAction().equals(SMS_RECEIVED) || _intent.getAction().equals(BOOT_COMPLETED)) {

并定义private static final String BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";IncomingSMSReceiver .以下是IncomingSMSReceiver的完整代码.

更改您的IncomingSMSReceiver代码:

public class IncomingSMSReceiver extends BroadcastReceiver {
private static final String queryString = "@zovi";
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private static final String BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";

public void onReceive(Context _context, Intent _intent) {
if (_intent.getAction().equals(SMS_RECEIVED) || _intent.getAction().equals(BOOT_COMPLETED)) {
Intent intent = new Intent(_context, IncomingSMSService.class);
_context.startService(intent);
Bundle bundle = _intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
for (SmsMessage message : messages) {
String msg = message.getMessageBody();
Log.i("Poruka", msg);
String to = message.getOriginatingAddress();
String contactName = TelefonUtils.getContact(_context, to);
Log.i("Od", contactName + "\n" + to);
}
}
}
}
}

因此,当您的手机重新启动时,它将收到 android.intent.action.BOOT_COMPLETED并调用您的IncomingSMSReceiver接收器然后它将启动您的IncomingSMSService .

希望对你有帮助。

关于android - 重启后短信广播接收器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32340916/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com