Ich lösche eine SMS aus dem Posteingang, möchte aber wissen: Wie kann ich sie löschen, bevor sie den Posteingang erreicht?
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
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
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.
/**
* 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.
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.