Tôi đang xóa một SMS khỏi hộp thư đến nhưng tôi muốn biết: Làm cách nào để xóa SMS trước khi nó đến hộp thư đến?
Tôi đang xóa một SMS khỏi hộp thư đến nhưng tôi muốn biết: Làm cách nào để xóa SMS trước khi nó đến hộp thư đến?
Câu trả lời:
Đúng.
Mặc dù có một số phản ứng tiêu cực đối với câu hỏi này, nhưng vẫn có những cách sử dụng hợp pháp để đánh chặn SMS. Ví dụ: tự động xác minh số điện thoại, các dịch vụ được cung cấp qua SMS (mặc dù nói chung điều này phải được thực hiện với SMS dữ liệu) hoặc cho các ứng dụng cải thiện trải nghiệm người dùng bằng cách xử lý các tin nhắn có định dạng đặc biệt để hiển thị chúng trong một Android đẹp -giao diện người dùng cụ thể.
Kể từ Android 1.6, các chương trình phát tin nhắn SMS đến ( android.provider.Telephony.SMS_RECEIVED
) được gửi dưới dạng " chương trình phát sóng theo thứ tự " - nghĩa là bạn có thể cho hệ thống biết thành phần nào sẽ nhận chương trình phát sóng trước.
Nếu bạn xác định một android:priority
thuộc tính trên tính năng nghe SMS của mình <intent-filter>
, thì bạn sẽ nhận được thông báo trước ứng dụng SMS gốc.
Tại thời điểm này, bạn có thể hủy chương trình phát sóng, ngăn nó được truyền sang các ứng dụng khác.
Cập nhật (tháng 10 năm 2013): Khi Android 4.4 ra mắt, nó sẽ thực hiện các thay đổi đối với API SMS, điều này có thể ảnh hưởng đến khả năng ảnh hưởng đến việc gửi SMS của ứng dụng.
Xem bài đăng trên blog Nhà phát triển Android này để biết thêm thông tin:
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html
1000
, vì vậy nó có thể. Trên thực tế, Handcent đang được ưu tiên sử dụng 2147483647
.
"Beginning with Android 4.4—any attempt by your app to abort the SMS_RECEIVED_ACTION broadcast will be ignored so all apps interested have the chance to receive it."
.
Bước 1: Tạo bộ thu phát sóng tùy chỉnh của bạn để nhận sms. viết logic để hủy bỏ phần rộng nhất để thư sẽ không có sẵn trong hộp thư đến của bạn
public class SMSReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
if(conditionMatches){
abortBroadcast();
}
}
}
Bước 2 Đăng ký bộ thu phát sóng trong AndoridManifest và đặt android: giá trị ưu tiên một số lượng lớn
<receiver android:name=".SMSReceiver" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
Đó là nó
Mã trên hoạt động như thế nào
Vì SMS nhận được truyền rộng là một chương trình phát sóng theo thứ tự, người nhận có mức độ ưu tiên cao sẽ nhận được đầu tiên nên ứng dụng của bạn nhận được trước và sau khi nhận được, bạn đang hủy phát sóng. Vì vậy, không có ứng dụng nào khác có thể nhận được nó. Do đó sms sẽ không tồn tại trong hộp thư đến
Giải pháp bên dưới ("android: priority" và abortBroadcast ()) hoạt động miễn là ứng dụng Nhắn tin Android làm mặc định (ý tôi là ứng dụng Nhắn tin Android gốc). Nếu người dùng cài đặt "GoSMSPro" hoặc "HandcentSMS", các ứng dụng này vẫn hiển thị tin nhắn trong hộp thư đến, tôi tin rằng điều này do "android: priority". Tôi không thấy cách nào tốt hơn để khắc phục sự cố trên, nếu các ứng dụng nhắn tin của bên thứ ba được cài đặt trên điện thoại.
/**
* Check priority
* @param activity
*/
public static void receiverPriority(Activity activity){
Intent smsRecvIntent = new Intent("android.provider.Telephony.SMS_RECEIVED");
List<ResolveInfo> infos = activity.getPackageManager().queryBroadcastReceivers(smsRecvIntent, 0);
for (ResolveInfo info : infos) {
System.out.println("Receiver: " + info.activityInfo.name + ", priority=" + info.priority);
}
}
Kiểm tra mức độ ưu tiên và đặt mức độ ưu tiên cao hơn (trong tệp kê khai của bạn) so với các máy thu khác.
Nếu bạn gặp trường hợp như thế này và bạn muốn xóa hoặc bỏ qua tin nhắn liên quan đến số liên lạc này "+ 44xxxxx", v.v., hãy sử dụng mã này trong bộ thu SMS Broadcast
if(sender.equalsIgnoreCase("+44xxxxxx")
this.abortBroadCast();
Bạn cũng phải đặt nó ở mức độ ưu tiên cao.