我试图建立一个接收短信和发送状态的课程。 这就是我的清单查找此任务的方式:
<receiver android:name=".SmsListener" android:permission="android.permission.BROADCAST_SMS" android:exported="true">
<intent-filter android:priority="5822">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.provider.Telephony.SMS_SENT" />
</intent-filter>
</receiver>
我收到了收到的消息,但是没有收到SENT消息,我的Manifest声明有问题吗?
PendingIntent _pendingIntent;
Intent _intent = new Intent();
_intent.setClass(ParkingOptionsActivity.this, SmsListener.class); // SmsListener extends BroadcastReceiver
_intent.putExtra("test","test");
_pendingIntent = PendingIntent.getActivity(ParkingOptionsActivity.this, 0, _intent, 0);
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, "test message", _pendingIntent, null);
答案 0 :(得分:3)
您需要使用PendingIntent
而不是getBroadcast()
获取getActivity()
,因为您要向BroadcastReceiver
发送广播,而不是Activity
在您当前的代码中,您只需更改一行:
_pendingIntent = PendingIntent.getBroadcast(ParkingOptionsActivity.this, 0, _intent, 0);
此外,当前SDK中不存在"android.provider.Telephony.SMS_SENT"
操作,并且在发送SMS时没有系统广播。您的应用并不真正需要清单条目中的<action>
,因为Intent
明确定位到您的Receiver类。
如果您计划将该操作用于其他内容 - 例如,区分onReceive()
中的广播,接收来自其他应用的隐式广播等等 - 那么您可以考虑将其更改为使用{{1}以外的其他内容1}}包名称,以免在将来引起潜在的不良行为或混淆。我想说,使用自己应用程序的软件包名称是常态。