android

Android8.0及以上版本自定義廣播無法傳送的問題

開發環境:

虛擬機器: 9.0

Android8.0及以上系統關於廣播的規定:對隱式廣播做了限定,如果targetSdkVersion >=26,在Manifest裡面註冊的Receiver可能無法接收到廣播訊息

如果是再同一個包內接收廣播,在傳送廣播時需要新增接收的廣播的完整路徑和類名,
檢視ComponentName類的原始碼,該類的介紹上說明要設定接收類所在的包名和類名

在使用Intent時需要為intent新增ComponentName,程式碼如下:

  1. public class MainActivity extends AppCompatActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. Button button = (Button) findViewById(R.id.button1);
  7. button.setOnClickListener(new View.OnClickListener() {
  8. @Override
  9. public void onClick(View view) {
  10. Intent intent = new Intent("MY_BROADCAST");
  11. intent.setComponent(new ComponentName("com.example.broadcasttest",
  12. "com.example.broadcasttest.MyBroadcastReceiver"));
  13. sendBroadcast(intent);
  14. }
  15. });
  16. }
  17. }

如果是需要在不同的包裡接收,兩個及以上的module,需要修改程式碼如下:

  1. @Override
  2. public void onClick(View view) {
  3. Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
  4. if(Build.VERSION.SDK_INT >= 26) {
  5. intent.addFlags(0x01000000);
  6. }
  7. sendBroadcast(intent);
  8. }

 

本文章已修改原文用詞符合繁體字使用者習慣使其容易閱讀

版權宣告:此處為CSDN博主「XingTina」的原創文章,依據CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。

原文連結:https://blog.csdn.net/XingTina/article/details/101304580