我正在创建一个接收SMS短信的应用程序,我创建了一个扩展BroadcastReceiver的类,以在应用程序内的烤面包中接收和显示SMS消息。我还添加了权限以及清单和接收者的声明。问题是它似乎仍然不显示该消息。它只会作为通知出现在顶部栏上。希望有人能够看到我要去哪里错了。为了显示该消息,我必须在mainactivity中添加一些代码吗?还是应该直接从接收器分类显示在我的所有活动中?下面的代码:
更新
我最终删除了我的接收器并重新创建了所有内容,现在看来
SmsReceiver.java可以正常工作:
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras ==null)
return;
//toast
Toast.makeText(context, "Received", Toast.LENGTH_LONG).show();
Object[] pdus = (Object[]) extras.get("pdus");
for (int i = 0; i < pdus.length; i++) {
SmsMessage SMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
String sender = SMessage.getOriginatingAddress();
String body = SMessage.getMessageBody().toString();
Intent in = new Intent("SmsMessage.intent.MAIN").putExtra("get_msg", sender+":"+body);
context.sendBroadcast(in);
this.abortBroadcast();
}
}
}
问题是它似乎仍然不显示该消息。它只会作为通知出现在顶部栏上
您知道什么是有序广播吗?
如果您不知道-这是广播,该广播由注册此广播的所有接收者同步接收(一个接一个)。您可以在清单接收器减速中设置一个优先级,并且每个接收器都可以使用aboartBroadcast()方法控制广播是否将在优先级链中传递给其他已注册的接收器。
这是什么,并接收短信?-SMS接收时,系统发送有序广播。如果接收者的优先级低于“默认SMS应用”的优先级-那么通常发生的情况是,首先获得广播的应用将取消广播,而您将永远不会收到它。
要在默认SMS应用程序之前获得广播,您必须声明接收者具有高优先级(提供优先级= 1000应该可以解决问题)。
不提供优先级-它会自动设置为零。
您可以看一下此示例-我如何截获带有特定文本的短信
还请确保您在清单中声明了对RECEIVE_SMS的许可
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句