2017-06-15 4 views
0

Ich schreibe eine App, die eingehenden SMS hört. Ich habe viele Fragen und Antworten online überprüft, aber es funktioniert immer noch nicht. Meine Codes:SmsBroadcast Empfänger funktioniert nicht

Mein AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
package="superapp.networkapp"> 
<!--send and read SMS--> 
<uses-permission android:name="android.permission.SEND_SMS" /> 
<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=".activity.MainActivity" 
     android:configChanges="keyboardHidden|orientation|screenSize" 
     android:screenOrientation="portrait"> 
    </activity> 

    <receiver android:name=".utility.tool.SmsReceiver" > 
     <intent-filter android:priority="2147483647"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 
    <activity 
     android:name=".activity.StartTestActivity" 
     android:configChanges="keyboardHidden|orientation|screenSize" 
     android:screenOrientation="portrait" 
     tools:replace="screenOrientation"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

Mein Zubehör/Tools/SmsReceiver.java

package superapp.networkapp.utility.tool; 

import ... 

public class SmsReceiver extends BroadcastReceiver { 
    //referenced from https://stackoverflow.com/questions/7089313/android-listen-for-incoming-sms-messages 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     Log.d("SMS", "onReceive: "); 
     if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { 
      //---get the SMS message passed in--- 
      Bundle bundle = intent.getExtras();   
      SmsMessage[] messages = null; 
      String sender; 
      if (bundle != null) { 
       //---retrieve the SMS message received--- 
       try { 
        Object[] pdus = (Object[]) bundle.get("pdus"); 
        if (pdus != null) { 
         messages = new SmsMessage[pdus.length]; 
         for(int i=0; i<messages.length; i++){ 
          messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]); //TODO 
          sender = messages[i].getOriginatingAddress(); 
          String msgBody = messages[i].getMessageBody(); 
          Toast.makeText(context,"Message: "+ msgBody + " from " + sender,Toast.LENGTH_LONG).show(); 
         } 
        } 
       } catch(Exception e){ 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

Ich habe askPermissions() Funktion im laufenden Betrieb läuft

private static final List<String> permissions = Arrays.asList(
      Manifest.permission.SEND_SMS, 
      Manifest.permission.READ_SMS, 
      Manifest.permission.RECEIVE_SMS); 
    private void askPermissions() { 
     if (!hasAllPermissions()) 
      ActivityCompat.requestPermissions(this, permissions.toArray(new String[0]), 69); 
    } 
    private boolean hasPermission(String permission) { 
     return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED; 
    } 

    private boolean hasAllPermissions() { 
     for (String permission : permissions) { 
      if (!hasPermission(permission)) return false; 
     } 
     return true; 
    } 

Ich habe 3 Geräte: Ein Samsung s7 und ein Sony Xperia Z5 Compact beide mit Android 7.0 und ein Samsung s6 mit Android 6.0.1. Wenn ich Nachrichten an diese Geräte sende, zeigen nur die Standard-Messenger-Apps die Benachrichtigungen an.

Ich habe die Antworten und Fragen anderer Leute überprüft. Es scheint, als hätten die Standard-Messenger-Apps eine höhere Priorität intentFilter oder sie rufen abortBroadcast() an. Ich habe auch die Priorität meiner Absicht gesetzt, die größte Ganzzahl oder 999 zu sein, wie in der Android-Dokumentation definiert, aber noch kein Glück.

+0

Haben Sie Empfänger noch registriert? –

+0

Ja. Ich registriere es in meinem AndroidManifest. Xml –

+0

Ich habe auch versucht, den Empfänger programmatisch zu registrieren, aber kein Glück noch. –

Antwort

1

Sie können dies versuchen, ich hatte auch das gleiche Problem, behoben durch Hinzufügen von Berechtigungen. und müssen Sie nicht Ihren Empfänger programmgesteuert registrieren, aber Sie müssen um Erlaubnis fragen Manifest.permission.READ_SMS

Verwandte Themen