wake-up-neo.com

Können wir eine SMS in Android bevor es den Posteingang erreicht?

Ich lösche eine SMS aus dem Posteingang, möchte aber wissen: Wie kann ich sie löschen, bevor sie den Posteingang erreicht?

100
umakant

Ja.

Trotz einiger negativer Reaktionen auf diese Frage gibt es legitime Verwendungszwecke für das Abfangen von SMS=. Zum Beispiel: Automatisierung der Überprüfung von Telefonnummern, Dienste, die über SMS (obwohl Dies sollte in der Regel mit Daten-SMS erfolgen, oder für Anwendungen, die das Benutzererlebnis auf andere Weise verbessern, indem sie speziell formatierte Nachrichten verarbeiten, um sie in einer netten Android-spezifischen Benutzeroberfläche anzuzeigen.

Ab Android 1.6, eingehende SMS) Nachrichtensendungen (Android.provider.Telephony.SMS_RECEIVED) Werden als " bestellte Sendung " geliefert. - was bedeutet, dass Sie dem System mitteilen können, welche Komponenten die Sendung zuerst empfangen sollen.

Wenn Sie ein Android:priority - Attribut in Ihrem SMS-Abhörprogramm <intent-filter> Definieren, erhalten Sie die Benachrichtigung vor der nativen SMS) Anwendung.

An dieser Stelle können Sie Abbrechen die Übertragung ausführen, um zu verhindern, dass sie an andere Apps weitergegeben wird.


Update (Oktober 2013): Wenn Android 4.4 eintrifft, werden Änderungen an der SMS APIs, die die Fähigkeit einer App beeinflussen können SMS Versand.
In diesem Android Entwickler-Blogpost für weitere Informationen:
http://Android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-KitKat.html

186
Christopher Orr

Schritt-1: Erstellen Sie Ihren benutzerdefinierten Rundfunkempfänger, um SMS zu empfangen. Schreiben Sie die Logik, um den Broadst abzubrechen, damit die Nachricht nicht in Ihrem Posteingang verfügbar ist

public class SMSReceiver extends BroadcastReceiver
{
    public void onReceive(Context context, Intent intent)
    {
     if(conditionMatches){
     abortBroadcast();
     }
    }
}

Schritt-2 Registrieren Sie den Rundfunkempfänger in AndoridManifest und setzen Sie Android: Priorität auf eine große Zahl

<receiver Android:name=".SMSReceiver" >
            <intent-filter Android:priority="1000">
                <action Android:name="Android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

Das ist es

Wie funktioniert der obige Code

Wenn SMS Broadcast empfangen eine bestellte Sendung ist, empfängt der Empfänger mit hoher Priorität zuerst, sodass Ihre Anwendung zuerst empfängt und Sie nach dem Empfang die Sendung abbrechen. Daher kann keine andere Anwendung sie empfangen. Daher die SMS wird nicht im Posteingang vorhanden sein

11

Die folgende Lösung ("Android: priority" und abortBroadcast ()) funktioniert so lange wie Android Messaging-Anwendung als Standard (ich meinte stock Android Messaging-Anwendung)). Wenn der Benutzer "GoSMSPro" oder "HandcentSMS" installiert, werden in diesen Anwendungen weiterhin Nachrichten im Posteingang angezeigt. Ich glaube, dies liegt an "Android: Priorität". Wenn Messaging-Anwendungen von Drittanbietern installiert sind, kann das Problem auf keine Weise besser behoben werden am Telefon.

9
Subba
/**
 * 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);
    }
}

Überprüfen Sie die Priorität und legen Sie eine höhere Priorität (in Ihrem Manifest) als bei anderen Empfängern fest.

1
taran mahal

Wenn Sie ein solches Szenario haben und die Nachricht zu dieser Kontaktnummer "+ 44xxxxx" usw. löschen oder ignorieren möchten, verwenden Sie diesen Code in SMS Rundfunkempfänger

 if(sender.equalsIgnoreCase("+44xxxxxx")
   this.abortBroadCast();

Sie müssen auch die hohe Priorität festlegen.

0
Pir Fahim Shah