Ich versuche, eine Anwendung zum Überwachen eingehender SMS-Nachrichten zu erstellen und ein Programm über eingehende SMS zu starten. Außerdem sollte es den Inhalt der SMS lesen.
Arbeitsablauf:
- SMS an Android-Gerät gesendet
- selbst ausführbare Anwendung
- Lesen Sie die SMS-Informationen
android
sms
android-service
iShader
quelle
quelle
Antworten:
Hinweis: Fügen Sie in Ihrer Manifestdatei den BroadcastReceiver hinzu.
Fügen Sie diese Berechtigung hinzu:
quelle
SMS_RECEIVED
Sendung weiterhin in Version 4.4+ erhalten. Da diese Sendung jetzt nicht abgebrochen werden kann, ist sie sicherer als in früheren Versionen.Beachten Sie, dass auf einigen Geräten Ihr Code ohne Android nicht funktioniert : priority = "1000" im Intent-Filter:
Und hier einige Optimierungen:
Hinweis :
Der Wert muss eine Ganzzahl sein, z. B. "100". Höhere Zahlen haben eine höhere Priorität. Der Standardwert ist 0. Der Wert muss größer als -1000 und kleiner als 1000 sein.
Hier ist ein Link.
quelle
android:priority
kann nicht höher als1000
(oder weniger als-1000
).@ Mike M. und ich haben ein Problem mit der akzeptierten Antwort gefunden (siehe unsere Kommentare):
Grundsätzlich macht es keinen Sinn, die for-Schleife zu durchlaufen, wenn wir die mehrteilige Nachricht nicht jedes Mal verketten:
Beachten Sie, dass wir nur
msgBody
den Zeichenfolgenwert des jeweiligen Teils der Nachricht festlegen , unabhängig davon, auf welchem Index wir uns befinden. Dies macht den gesamten Punkt des Durchlaufens der verschiedenen Teile der SMS-Nachricht unbrauchbar, da er nur auf den Wert gesetzt wird letzter Indexwert. Stattdessen sollten wir verwenden+=
, oder wie Mike bemerkteStringBuilder
:Alles in allem sieht mein SMS-Empfangscode folgendermaßen aus:
Stellen Sie diese Antwort einfach da raus, falls jemand anderes die gleiche Verwirrung hat.
quelle
Das habe ich benutzt!
quelle
Wenn Sie die Absicht einer geöffneten Aktivität behandeln möchten, können Sie PendintIntent verwenden (Schritte unten ausführen):
Manifest:
onNewIntent:
Berechtigungen:
quelle
Wenn jemand wie ich auf Xamarin Android verweist, wie dieselbe Funktion (Lesen von OTP mithilfe empfangener SMS) ausgeführt wird:
Fügen Sie diesen Code Ihrer AndroidManifest.xml-Datei hinzu:
Erstellen Sie dann Ihre BroadcastReveiver-Klasse in Ihrem Android-Projekt.
Registrieren Sie diese BroadcastReceiver-Klasse in Ihrer MainActivity-Klasse in Android Project:
quelle
Vielen Dank an @Vineet Shukla (die akzeptierte Antwort) und @Ruchir Baronia (das Problem in der akzeptierten Antwort gefunden). Unten ist die
Kotlin
Version:Berechtigung hinzufügen:
Registrieren Sie BroadcastReceiver in AndroidManifest:
Implementierung für BroadcastReceiver hinzufügen:
Manchmal wird das Ereignis zweimal ausgelöst, also füge ich hinzu
mLastTimeReceived = System.currentTimeMillis()
quelle
Broadcast-Implementierung auf Kotlin:
Hinweis: Fügen Sie in Ihrer Manifestdatei den BroadcastReceiver hinzu.
Fügen Sie diese Berechtigung hinzu:
quelle
Die akzeptierte Antwort ist korrekt und funktioniert auf älteren Android-Versionen, bei denen Android OS bei der App-Installation nach Berechtigungen fragt. Bei neueren Android-Versionen funktioniert dies jedoch nicht sofort, da neuere Android-Betriebssysteme zur Laufzeit nach Berechtigungen fragen, wenn die App diese Funktion benötigt . Um SMS auf neueren Android-Versionen mit der im anerkannten Antwortprogrammierer genannten Technik zu empfangen, muss daher auch Code implementiert werden, der die Berechtigungen des Benutzers zur Laufzeit überprüft und anfordert. In diesem Fall können Berechtigungsprüfungsfunktionen / -code in onCreate () der ersten Aktivität der App implementiert werden. Kopieren Sie in Ihrer ersten Aktivität einfach die folgenden zwei Methoden und fügen Sie sie ein. Rufen Sie am Ende von onCreate () die Methode checkForSmsReceivePermissions () auf.
quelle