首先,我已经搜索了可能的解决方案,尝试了一切,但仍然无效.我肯定错过了什么.
我正在尝试创建一个接收/读取和写入SMS的应用程序.
写部分工作正常,我的广播接收器只是没有捕捉广播.@H_404_4@
<uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> ... <receiver android:name=".SmsReceiver" android:permission="android.permission.BROADCAST_SMS"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
SmsReceiver.java@H_404_4@
public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context,Intent intent) { Toast.makeText(context,"ON RECEIVE BROADCAST",Toast.LENGTH_LONG).show(); Log.d("ON ","RECEIVE"); Bundle bundle = intent.getExtras(); Object[] messages = (Object[]) bundle.get("pdus"); SmsMessage[] sms = new SmsMessage[messages.length]; // Create messages for each incoming PDU for (int n = 0; n < messages.length; n++) { sms[n] = SmsMessage.createFromPdu((byte[]) messages[n]); } for (SmsMessage msg : sms) { Log.e("RECEIVED MSG",":"+msg.getMessageBody()); // Verify if the message came from our known sender } }
没有触发Logs或Toast.@H_404_4@
尝试将清单上的操作更改为android.intent.action.AIRPLANE_MODE只是为了测试声明并收到广播,这对于SMS不起作用.@H_404_4@
更新@H_404_4@
尝试使用不同的手机,但它确实有效.一定是因为我使用的是Handcent短信,还有一些如何阻止广播.无论哪种方式,我需要它独立于安装的应用程序在每个手机上工作.@H_404_4@
解决方法
尝试将接收器声明如下:
<receiver android:name=".SmsReceiver" android:permission="android.permission.BROADCAST_SMS" android:exported="true"> <intent-filter android:priority="5822" > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>