Ich lösche eine SMS aus dem Posteingang, möchte aber wissen: Wie kann ich sie löschen, bevor sie 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?
Antworten:
Ja.
Trotz einiger negativer Reaktionen auf diese Frage gibt es legitime Verwendungsmöglichkeiten für das Abfangen von SMS. Zum Beispiel: Automatisierung der Überprüfung von Telefonnummern, Dienste, die per SMS bereitgestellt werden (obwohl dies im Allgemeinen mit Daten-SMS erfolgen sollte) oder für Anwendungen, die ansonsten die Benutzererfahrung verbessern, indem sie speziell formatierte Nachrichten verarbeiten, um sie in einem schönen Android anzuzeigen -spezifische Benutzeroberfläche.
Ab Android 1.6 werden eingehende SMS-Sendungen ( android.provider.Telephony.SMS_RECEIVED
) als " bestellte Sendung " zugestellt. Dies bedeutet, dass Sie dem System mitteilen können, welche Komponenten die Sendung zuerst empfangen sollen.
Wenn Sie beim android:priority
Abhören von SMS ein Attribut definieren <intent-filter>
, erhalten Sie die Benachrichtigung vor der nativen SMS-Anwendung.
Zu diesem Zeitpunkt können Sie die Übertragung abbrechen und verhindern, dass sie an andere Apps weitergegeben wird.
Update (Oktober 2013): Wenn Android 4.4 verfügbar ist, werden Änderungen an den SMS-APIs vorgenommen, die sich auf die Fähigkeit einer App auswirken können, die SMS-Zustellung zu beeinflussen.
Weitere Informationen finden Sie in diesem Blog-Beitrag für Android-Entwickler:
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html
1000
, also ist es möglich. In der Tat verwenden Handcent Priorität 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."
.
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 Broadcast-Empfänger in AndoridManifest und setzen Sie Android: Prioritätswert 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?
Da es sich bei der SMS-Empfangsübertragung um eine geordnete Sendung handelt, empfängt der Empfänger mit hoher Priorität zuerst, sodass Ihre Anwendung zuerst empfängt und Sie nach dem Empfang die Sendung abbrechen. So kann keine andere Anwendung es erhalten. Daher ist die SMS im Posteingang nicht vorhanden
Die folgende Lösung ("android: priority" und abortBroadcast ()) funktioniert so lange wie die Android Messaging-Anwendung als Standard (ich meinte die Standard-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: priority". Ich sehe keinen besseren Weg, um das oben genannte Problem zu beheben, wenn Messaging-Anwendungen von Drittanbietern auf dem Telefon installiert sind.
/**
* 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) fest als bei anderen Empfängern.
Wenn Sie ein solches Szenario haben und die Nachricht zu dieser Kontaktnummer "+ 44xxxxx" usw. löschen oder ignorieren möchten, verwenden Sie diesen Code im SMS-Rundfunkempfänger
if(sender.equalsIgnoreCase("+44xxxxxx")
this.abortBroadCast();
Sie müssen auch die hohe Priorität festlegen.