Chúng tôi có thể xóa SMS trong Android trước khi nó đến hộp thư đến không?


100

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?


2
J2ee có thực sự là một thẻ phù hợp ở đây không?
jitter

1
Tại sao java không chính xác, bạn không lập trình trong java trên Android?
jitter

3
Điều này đầy rẫy sự xấu xa. Bạn không nên làm điều này.
MattC

43
Có sử dụng hợp pháp! Ví dụ: nếu bạn muốn làm điều gì đó (gửi vị trí GPS, xóa hoặc một cái gì đó) trên điện thoại của bạn qua SMS trong trường hợp nó bị đánh cắp; bạn không muốn bất kỳ ai đã lấy trộm điện thoại nhìn thấy tin nhắn SMS đó.
polyglot

21
Cố lên mọi người! Điều này chắc chắn KHÔNG "xấu xa" chút nào. @polyglot đã đúng! Tôi đang làm một ứng dụng để xác nhận số của người dùng (như Viber làm) và tôi cần nó. Mọi thứ có thể được sử dụng như là "ác". Đừng cài đặt những ứng dụng độc ác, chỉ vậy thôi.
Felipe

Câu trả lời:


187

Đú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:prioritythuộ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


13
Thần thánh. Đây là sự thật! Tôi đã luôn cho rằng nó sẽ là ngược lại! Để có bằng chứng, hãy xem ở đây . Chà. Ước gì tôi có thể cung cấp cho bạn nhiều hơn một phiếu ủng hộ;)
Hamy

1
@kakopappa: Có, như đã đề cập trong câu trả lời, nó hoạt động từ Android 1.6+.
Christopher Orr

1
@herom Tôi có các ứng dụng sử dụng mức độ ưu tiên 1000, vì vậy nó có thể. Trên thực tế, Handcent đang được ưu tiên sử dụng 2147483647.
Christopher Orr

2
Điều này đã làm việc cho tôi :) Ứng dụng của tôi bắt tin nhắn đầu tiên và không có thông báo nhưng sau đó sms không nhận được hộp thư đến Tin nhắn. Giống như nó chưa bao giờ được nhận, chỉ trong ứng dụng của tôi. Có cách nào để sử dụng chương trình phát sóng hủy bỏ nhưng nhận được tin nhắn trong hộp thư đến không?
pandabear

7
Điều quan trọng cần ghi nhớ là API mới cấp 19 như @ChristopherOrr đã nói trong bản cập nhật của mình. Nó nói "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.".
GoRoS

11

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


chúng ta có thể có một máy thu phát sóng, khi người dùng nhấn nhắn hộp thư đến, vì vậy mà tôi có thể phát triển một màn hình khóa ..
Vamsi Pavan Mahesh

9

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.


2
Điểm tốt. Nhưng đây nên là một bình luận, không phải là một câu trả lời. Có thể di chuyển nó không? --- và nếu bạn đặt một giá trị rất cao thì sao? Là android: priority = "9999"? ví dụ? Bạn đã thử điều đó chưa?
Felipe

4
@FelipeMicaroniLalli thực GO SMS PRO, vv ... sử dụng 2147483647 ưu tiên của họ
rf43

1
@DDoSAttack 2147483647 là tối đa?
Felipe

3
Đây là số nguyên unsigned lớn nhất en.wikipedia.org/wiki/Integer_(computer_science) tối đa mà Android hỗ trợ là 999. developer.android.com/reference/android/content/...
rf43

2
@NomanHamid Điều đó chính xác. 999 là mức ưu tiên tối đa. Bạn có thể sử dụng bất kỳ số nào bạn chọn, Android sẽ chỉ đảm bảo tối đa 999. Bất cứ thứ gì lớn hơn và nó có thể không ổn định hoặc không và gây ra những hậu quả không lường trước được. Cá nhân tôi đã phải sử dụng 2147483647 để cố gắng chuyển qua các ứng dụng như GO SMS PRO. Đôi khi nó hoạt động cho người dùng và đôi khi nó không.
rf43 30/09

1
/**
 * 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.


0

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.