2016-04-29 11 views
0

Ich bin ziemlich neu zu Android, und ich habe versucht, meine Broadcastreceiver dynamisch registrieren, so dass ich Smss empfangen konnte, aber ich kann es einfach nicht funktionieren, hier ist meine Code:Kann Broadcastreceiver nicht dynamisch registrieren

public class MainActivity extends AppCompatActivity { 

BroadcastReceiver receiver; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

     } 
    }); 

    receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Toast.makeText(getApplicationContext(), "Hellllo", Toast.LENGTH_SHORT).show(); 
     } 
    }; 
    IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 
    registerReceiver(receiver,filter); 
} 

das "Hallo" Pop-up-Toast wird nicht so der Empfänger ich gehe davon aus nicht

registriert wurde, habe ich diese Berechtigungen in meinem Manifest:

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

Was bin ich fehlt ?

+1

Steht Ihre "Aktivität" im Vordergrund, wenn Sie die SMS erhalten? Sind Ihre Berechtigungen außerhalb der '' Tags? Was ist Ihre 'targetSdkVersion' und welche Version von Android testen Sie? –

+0

Die Aktivität steht im Vordergrund, wenn ich die SMS empfange. Die Berechtigungen liegen außerhalb der Tags. minSdkVersion 16. targetSdkVersion 23. Testen auf Android 4.2.2 API 17. – javaLovah

+2

Haben Sie eine andere SMS-App installiert, die die Übertragung abfangen könnte? Wie Hangouts oder GoSMS? –

Antwort

0

Wir haben in Kommentaren festgestellt, dass die SMS_RECEIVED Sendung abgefangen und von einer anderen App abgebrochen wurde. Dies war in Android vor KitKat (API 19) möglich, aber seit Versionen nicht mehr.

Die Lösung war, die Priorität auf IntentFilter Instanz auf 999, unter Verwendung der IntentFilter#setPriority() Methode.

Bitte beachten Sie jedoch, dass es immer noch möglich ist, dass eine andere App die Übertragung abbricht, bevor sie empfangen wird. Obwohl die Dokumente sagen, dass Empfänger mit IntentFilter s mit der gleichen Priorität die Übertragung in einer willkürlichen Reihenfolge geliefert wird, wird in der Regel festgestellt, dass sie in der Reihenfolge geliefert werden, in der die Apps installiert wurden. Darüber hinaus ist es möglich, dass einige Apps, z. B. System-Apps, vorinstallierte Apps usw., eine höhere Priorität als 999 haben. Dies ist der maximale praktische Wert für Ihre App.