我是Stackoverflow的新手,目前正致力于处理传入短信的应用。当我在寻找解决方案时,我遇到了不同的方式,包括独立的BroadcastReceivers和服务,它们运行良好。即使应用程序处于后台并且屏幕关闭(手机已锁定),目标也是接收短信。
我目前的问题是:我收到任何在服务中运行的BroadcastReceiver的短信。此服务在我的MainActivity的onResume()中启动,不应该停止。
奇怪的事情发生在这里:
这是我的服务类代码:
public class SmsProcessService extends Service {
SmsReceiver smsReceiver = new SmsReceiver();
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
registerReceiver(smsReceiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));
return START_STICKY;
}
private class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String telnr = "", nachricht = "";
Bundle extras = intent.getExtras();
if (extras != null) {
Object[] pdus = (Object[]) extras.get("pdus");
if (pdus != null) {
for (Object pdu : pdus) {
SmsMessage smsMessage = getIncomingMessage(pdu, extras);
telnr = smsMessage.getDisplayOriginatingAddress();
nachricht += smsMessage.getDisplayMessageBody();
}
// Here the message content is processed within MainAct
MainAct.instance().processSMS(telnr.replace("+49", "0").replace(" ", ""), nachricht);
}
}
}
private SmsMessage getIncomingMessage(Object object, Bundle bundle) {
SmsMessage smsMessage;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
String format = bundle.getString("format");
smsMessage = SmsMessage.createFromPdu((byte[]) object, format);
} else {
smsMessage = SmsMessage.createFromPdu((byte[]) object);
}
return smsMessage;
}
}
}
在我的MainActivity中,我声明了一个Intent
Intent smsServiceIntent
在onCreate()中初始化,就像这样
smsServiceIntent = new Intent(MainAct.this, SmsProcessService.class);
我在Activity onResume()
中启动服务
MainAct.this.startService(smsServiceIntent);
我的清单文件有<service android:name=".SmsProcessService" />
来声明服务和以下权限:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
我真的希望,你可以给我一些帮助,帮助弄清楚应用程序的行为。
Greets Steffen
答案 0 :(得分:2)
我现在在不同的手机上试过这个应用程序,我想我找到了问题的根源。
在另一部手机上(相同的操作系统版本)一切正常。我想其他几个应用程序也会收到短信广播,也许他们会互相干扰。我没有设法弄清楚哪些应用程序最差。
我现在将尝试本地化具有类似用途的其他应用程序,并希望卸载或更改其通知设置将有所帮助。你有没有想过那些其他的应用程序(比如&#34; Auto Ring&#34;我想进一步使用它们)可以并行工作吗?
修改强>
我发现问题导致应用:它是Google-App,它也获得了SMS权限。我将其停用并且外翻工作正常
Greets Steffen
答案 1 :(得分:0)
将广播优先级设置为2147483647
可以解决here所述的问题。
<receiver android:name=".SmsReceiver">
<intent-filter android:priority="2147483647" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>