2016-06-10 5 views
2

Wir suchen, um die Funktionalität in unserer App zu bauen, um einen Sicherheitscode zu lesen, der als Teil von SMS gesendet und in der textView angezeigt wird. Ich bin auch nicht auf der Suche nach einem Broadcast-Empfänger, möglicherweise ein Absichtsdienst, der nur auf einem bestimmten Bildschirm ausgeführt wird und den Dienst beendet, sobald der Benutzer zu einem anderen Bildschirm navigiert.So lesen Sie SMS-Code von Ihrer Android-App

Es wäre großartig, wenn jemand etwas Licht beschatten und mit ein wenig Beispielcode helfen könnte.

+0

sollten Sie überprüfen [Android - Listen für eingehende SMS-Nachrichten] (http://stackoverflow.com/ Fragen/7089313/android-listen-for-incoming-SMS-Nachrichten) –

+0

Haben Sie sogar versucht zu suchen? Es gibt buchstäblich Hunderte von Posts auf dieser Seite, die sich mit dem Umgang mit SMS in Android beschäftigen. –

+0

Wenn der Sicherheitscode Ihre einzige Sorge ist, könnten Sie ein Trennzeichen vor und/oder nach Ihrem Sicherheitscode verwenden und die "Zeichenfolge" in der SMS mit diesem Trennzeichen aufteilen. Dies würde Ihnen Ihren Sicherheitscode geben. Wenn Sie wissen möchten, wie Sie eingehende Nachrichten abfangen können, können Sie den @ RRR-Link oder [diesen Link] (http://www.androidhive.info/2015/08/android-adding-sms-verification-like-whatsapp- Teil 2/). –

Antwort

3

Um eingehende SMS zu lesen, müssen Sie drei Dinge tun.

  1. Broadcast-Receiver
  2. Deklarieren Broadcast-Empfänger in einem offenkundigen
  3. benötigen SMS Receive Berechtigungen

Hinweis: Wenn Sie gegen 6,0 Marshmallow Kompilieren werden, haben Sie android.permission.RECEIVE_SMS zur Laufzeit bekommen. Runtime Permissions

Lets Startet eingehende SMS-Empfang

1) Erste Berechtigungen hinzufügen in manifest

<uses-permission android:name="android.permission.RECEIVE_SMS" /> 

2) Erklären Sie Broadcast-Empfänger in Manifest.

Mit dieser Erklärung wird es Sie informieren, wenn immer eine neue SMS von Gerät empfangen wird.

<receiver android:name="com.example.abc.ReciveSMS"> 
    <intent-filter> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 

3) Fügen Sie diesen Code in Ihre deklarierte Klasse in manifest

public class ReciveSMS extends BroadcastReceiver{ 

    private SharedPreferences preferences; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ 
      Bundle bundle = intent.getExtras();   //---get the SMS message passed in--- 
      SmsMessage[] msgs = null; 
      String msg_from; 
      if (bundle != null){ 
       //---retrieve the SMS message received--- 
       try{ 
        Object[] pdus = (Object[]) bundle.get("pdus"); 
        msgs = new SmsMessage[pdus.length]; 
        for(int i=0; i<msgs.length; i++){ 
         msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
         msg_from = msgs[i].getOriginatingAddress(); 
         String msgBody = msgs[i].getMessageBody(); 
        } 
       }catch(Exception e){ 
//       Log.d("Exception caught",e.getMessage()); 
       } 
      } 
     } 
    } 
} 

Original Post here.

+0

Sohail danke für die Beantwortung meiner Frage. Meine Frage ist um den Rundfunkempfänger. Ich möchte hier einen Hintergrunddienst ausführen, da der Dienst nur gestartet werden soll, wenn sich der Benutzer auf einem bestimmten Bildschirm befindet, und den Dienst dann beenden muss. Broadcast-Empfänger ist lange laufenden Hintergrund Aufgabe – Bulu

+0

ok kein Problem können Sie einen Empfänger auch für bestimmte Bildschirm registrieren, wenn auf diesen Bildschirm springen wird es SMS empfangen, wenn Sie aus diesem Bildschirm springen Sie, wenn keine SMS erhalten wird ... ist diese Arbeit für Sie ? –