Próbuję stworzyć aplikację do monitorowania przychodzących wiadomości SMS i uruchamiać program poprzez przychodzące SMS-y, również powinien czytać treść z SMS-a.
Przepływ pracy:
- SMS wysłany na urządzenie z systemem Android
- samowykonalna aplikacja
- Przeczytaj informacje SMS
android
sms
android-service
iShader
źródło
źródło
Odpowiedzi:
Uwaga: w pliku manifestu dodaj BroadcastReceiver-
Dodaj to uprawnienie:
źródło
SMS_RECEIVED
transmisję w wersji 4.4+, a teraz, gdy tej transmisji nie można przerwać, jest to bardziej pewne niż w poprzednich wersjach.Pamiętaj, że na niektórych urządzeniach Twój kod nie będzie działał bez androida: priority = "1000" w filtrze intencji:
A oto kilka optymalizacji:
Uwaga :
wartość musi być liczbą całkowitą, np. „100”. Wyższe liczby mają wyższy priorytet. Wartość domyślna to 0. Wartość musi być większa niż -1000 i mniejsza niż 1000.
Oto link.
źródło
android:priority
nie może być wyższa niż1000
(lub poniżej-1000
).@Mike M. i ja znaleźliśmy problem z zaakceptowaną odpowiedzią (zobacz nasze komentarze):
Zasadniczo nie ma sensu przechodzenie przez pętlę for, jeśli nie łączymy wiadomości wieloczęściowej za każdym razem:
Zauważ, że po prostu ustawiliśmy
msgBody
wartość ciągu odpowiedniej części wiadomości bez względu na indeks, w którym się znajdujemy, co sprawia, że cały punkt pętli przez różne części wiadomości SMS jest bezużyteczny, ponieważ zostanie ustawiony na bardzo ostatnia wartość indeksu. Zamiast tego powinniśmy użyć+=
, lub jak zauważył MikeStringBuilder
:Podsumowując, oto jak wygląda mój kod odbioru SMS:
Po prostu umieszczam tę odpowiedź na wypadek, gdyby ktoś inny miał takie samo zamieszanie.
źródło
To jest to, czego użyłem!
źródło
Jeśli chcesz zająć się intencją otwartej aktywności, możesz użyć PendintIntent (wykonaj poniższe czynności):
oczywisty:
onNewIntent:
uprawnienia:
źródło
Jeśli ktoś odnosi się do tego, jak zrobić tę samą funkcję (odczytywanie OTP za pomocą odebranego SMS-a) na Xamarin Android, tak jak ja:
Dodaj ten kod do pliku AndroidManifest.xml:
Następnie utwórz klasę BroadcastReveiver w swoim projekcie Android.
Zarejestruj tę klasę BroadcastReceiver w swojej klasie MainActivity w Android Project:
źródło
Dziękuję @Vineet Shukla (zaakceptowana odpowiedź) i @Ruchir Baronia (znalazłem problem w zaakceptowanej odpowiedzi), poniżej znajduje się
Kotlin
wersja:Dodaj uprawnienia:
Zarejestruj BroadcastReceiver w AndroidManifest:
Dodaj implementację dla BroadcastReceiver:
Czasami zdarzenie jest uruchamiane dwukrotnie, więc dodaję
mLastTimeReceived = System.currentTimeMillis()
źródło
wdrożenie transmisji na Kotlin:
Uwaga: w pliku manifestu dodaj BroadcastReceiver-
Dodaj to uprawnienie:
źródło
Zaakceptowana odpowiedź jest poprawna i działa na starszych wersjach Androida, w których system operacyjny Android prosi o uprawnienia podczas instalacji aplikacji, jednak w nowszych wersjach Androida nie działa od razu, ponieważ nowszy system operacyjny Android prosi o uprawnienia w czasie wykonywania, gdy aplikacja wymaga tej funkcji . Dlatego, aby otrzymywać SMS-y na nowszych wersjach Androida przy użyciu techniki wspomnianej w zaakceptowanej odpowiedzi, programista musi również zaimplementować kod, który będzie sprawdzał i pytał użytkownika o uprawnienia w trakcie działania. W takim przypadku sprawdzanie uprawnień / kodu może zostać zaimplementowane w onCreate () pierwszej aktywności aplikacji. Po prostu skopiuj i wklej następujące dwie metody w swoim pierwszym działaniu i wywołaj metodę checkForSmsReceivePermissions () na końcu onCreate ().
źródło