Tôi đang làm việc trên một ứng dụng chặn sms, trong đó tôi đang sử dụng bộ thu phát và phương thức abortBroadcast() - như nhiều ppl đã đề xuất ở đây - để ngăn các thư đến hộp thư đến và cảnh báo người dùng. Nhưng trong trường hợp của tôi, khi tôi gửi tin nhắn bằng trình mô phỏng, tin nhắn SMS sẽ không bị chặn và đến hộp thư đến, tôi cũng gặp lỗi:SMS không thể được ngăn chặn bằng cách sử dụng abortBroadcast()?
06-29 09:19:05.854: E/BroadcastReceiver(868): BroadcastReceiver trying to return result during a non-ordered broadcast
không chấm dứt ứng dụng trong giả lập, tuy nhiên các ứng dụng được chấm dứt khi tôi kiểm tra nó trên điện thoại của tôi.
Và vâng, tôi đã đặt ưu tiên hàng đầu của người nhận để một số lượng lớn và yêu cầu các điều khoản như bạn thấy ở đây:
<receiver android:name="SMSMonitor">
<intent-filter android:priority="9999999">
<action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RAISED_THREAD_PRIORITY"/>
Cuối cùng, đây là mã của tôi:
public class SMSMonitor extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean isOn = loadState(context,"isOn");// is blocking enabled?
Bundle bundle = intent.getExtras();
Object messages[] = (Object[]) bundle.get("pdus");
SmsMessage smsMessage[] = new SmsMessage[messages.length];
String mAddress;
String mBody;
String mTime;
if(isOn){
// if spam blocking is enabled.
for (int n = 0; n < messages.length; n++) {
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
mAddress=smsMessage[n].getDisplayOriginatingAddress().toString();
mBody=smsMessage[n].getDisplayMessageBody().toString();
mTime=getTime();
if(isBlackList(mAddress)== true) {
this.addLog(mAddress, mBody, mTime);
abortBroadcast();
Toast.makeText(context,"Incoming SMS was blocked and logged.", Toast.LENGTH_LONG).show();
}
}
}
}
}
Một số một gợi ý here rằng các chương trình phát SMS không thể bị hủy bỏ vì Android sẽ không cho phép. Nhưng tôi đã thấy nhiều người ở đây đề nghị sử dụng abortBroadcast() để chặn một tin nhắn, và tôi cũng biết một số ứng dụng chặn SMS trên thị trường mà thực sự có thể chặn tin nhắn SMS. Tôi không biết nếu họ đang sử dụng abortbroadcast hay không.
Bất kỳ ý tưởng nào?
Vui lòng Chấp nhận/phiếu bầu tán thành câu trả lời nếu bạn đã có giải pháp của bạn :) –
Tôi nghĩ rằng tôi có câu trả lời, "Tính đến Android 1.6, các chương trình phát sóng tin nhắn SMS đến (android.provider.Telephony.SMS_RECEIVED) được phân phối dưới dạng "phát sóng theo thứ tự" - nghĩa là bạn có thể cho hệ thống biết các thành phần nào sẽ nhận được chương trình phát sóng đầu tiên. " và tôi đang sử dụng Android 1.5 Và chương trình phát sóng không được đặt hàng! Nhờ anh chàng này ở đây [link] (http://stackoverflow.com/questions/419184/how-to-delete-an-sms-from-the-inbox-in-android-programmatically) – Wise