2016-04-29 80 views
0

我對android很新穎,我一直試圖動態註冊我的BroadcastReceiver,所以我可以收到smss,但我似乎無法使它工作,這是我的代碼:似乎無法動態註冊Broadcastreceiver

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

的「你好」吐司不會彈出,所以我假設接收器未註冊

我把這個權限在我的清單:

<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> 

我失去了什麼?

+1

當您收到短信時,您的「活動」在前臺嗎?您的權限是否位於''標記之外?你的'targetSdkVersion'是什麼,你正在測試哪個Android版本? –

+0

當我收到短信時,該活動處於前臺。 權限不在標記之外。 minSdkVersion 16. targetSdkVersion 23. 在android 4.2.2 API 17上測試。 – javaLovah

+2

您是否安裝了另一個可能攔截廣播的SMS應用程序?像環聊,或GoSMS? –

回答

0

我們在評論中確定SMS_RECEIVED廣播正在被另一個應用攔截並中止。這在KitKat(API 19)之前的Android中是可能的,但是它之後並不在版本中。

解決的辦法是使用IntentFilter#setPriority()方法將IntentFilter實例的優先級設置爲999

但請注意,其他應用程序在您收到廣播之前仍有可能中止廣播。儘管文檔說接收者具有相同的優先級IntentFilter將以任意順序傳送,但通常會按照應用程序的安裝順序傳送。此外,某些應用程序(例如系統應用程序,預安裝的應用程序等)可能具有高於999的優先級,這是您的應用程序的最大實用價值。