Android 8.0(api27)靜態廣播和動態廣播接收問題


隨着Android api版本的升級,Android當中的安全問題越來越被重視。

以前廣播,隨便用,代碼使用時幾乎不會出問題。

可到了Android 8.0,api 27,廣播的時候和之前不同了,如果還用之前的使用方式,無法正常響應。

具體使用方式如下:

Android 8.0對廣播進行了限制:靜態廣播(應用內)需要為Intent設置setClassName(String),動態廣播需要為IntentFilter設置addAction(String)同時還要為Intent設置setAction(String),並且這兩個字符內容必須一樣。

1.靜態廣播(應用內):必須設置setClassName(context, "包+類名")

//廣播接收者--MyBroadcastReceiver.java
package com.example.administrator.testmvp.broadcast_receiver;

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, intent.getAction(), Toast.LENGTH_SHORT).show();
    }
}

//注冊靜態廣播--AndroidManifest.xml
<receiver android:name=".broadcast_receiver.MyBroadcastReceiver"
    android:permission="true">
      <intent-filter>
         <action android:name="myBroadcastReceiver" />
      </intent-filter>
</receiver>

// 發送靜態廣播-MainActivity
Intent intent = new Intent();
intent.setAction("myBroadcastReceiver");
String className = getPackageName() + ".broadcast_receiver.MyBroadcastReceiver";
intent.setClassName(MainActivity.this, className);
sendBroadcast(intent);

2.動態廣播:intentFilter.addAction(String)和intent.setAction(String)字符內容必須一樣

//廣播接收者
package com.example.administrator.testmvp.broadcast_receiver;

public class DynamicBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, intent.getAction(), Toast.LENGTH_SHORT).show();
    }
}

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.example.broadcasttest.MY_BROADCAST");
// 注冊動態廣播
registerReceiver(new DynamicBroadcastReceiver(), intentFilter);
// 發送動態廣播
Intent intent = new Intent();
intent.setAction("com.example.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);

總結:隨着Android api版本升級,安全性越來越被重視,除了廣播,其他api的安全性有的也發生了變化。我們開發者要清楚該趨勢,開發過程中要注意相關問題,避免出現問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM