2016-03-28 7 views
0

Ich folgte einem Tutorial, um SMS zu empfangen und in meiner App zu zeigen. Wenn ich jedoch versuche, SMS mit Android Device Monitor (und auch Telnet mit Android-Terminal) zu senden, empfängt der Emulator selbst die SMS, aber die App tut nichts.Probleme beim Empfangen von SMS in App

Der Code wird wie folgt ...

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Sms extends Activity { 

TextView t1; 
BroadcastReceiver receiver = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_sms); 
    t1 = (TextView) findViewById(R.id.textView); 

    IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 
    receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context arr0, Intent arr1) { 
      processReceive(arr0, arr1); 
     } 
    }; 
    registerReceiver(receiver, filter); 
} 

protected void onDestroy() { 
    super.onDestroy(); 
    unregisterReceiver(receiver); 
} 

public void processReceive(Context context, Intent intent) { 
    Toast.makeText(context, "Incoming...", Toast.LENGTH_LONG).show(); 

    Bundle bundle = intent.getExtras(); 
    Object[] objArr = (Object[]) bundle.get("pdus"); 
    String sms = ""; 

    for (int i = 0; i < objArr.length; i++) { 
     SmsMessage smsMsg = SmsMessage.createFromPdu((byte[]) objArr[i]); 

     String smsBody = smsMsg.getMessageBody(); 
     sms += smsBody; 
    } 
    t1.setText(sms); 
} 
}  

Die Manifest.xml wird wie folgt ...

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

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".Sms"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

Irgendwelche Vorschläge? Der Emulator erhält die SMS, aber nicht die App. Ich habe auch versucht, das android: priority-Attribut im intent-filter-Tag zu verwenden, aber nichts funktioniert. Der Toast, der beim Aufruf der onReceive-Methode "Incoming ..." anzeigen soll, wird ebenfalls nicht aufgerufen (zeigt an, dass die App keine SMS empfängt). Die Berechtigungen sehen auch gut für mich aus. Bitte helfen ...

Dies ist der Youtube-Link: https://www.youtube.com/watch?v=h-zYXVODiPo

+0

Welche Version von Android werden unter Ihnen ausgeführt wird, und was ist Ihr 'targetSdkVersion'? –

+0

@MikeM. Ich benutze es auf Lollipop und es ist auch das targetSdkVersion –

+0

Nun, Ihr Code ist in Ordnung für diese Version. Vielleicht ein Problem mit dem Emulator? Haben Sie ein Gerät, an dem Sie es testen können? –

Antwort

-1
Try this code to receive sms - 

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) 
         { 
         } 

        }