1. 程式人生 > >安卓系統5.1.0和安卓系統8.1.0下接收廣播的不同

安卓系統5.1.0和安卓系統8.1.0下接收廣播的不同

靜態廣播

。。。。

低版本安卓系統5.1.0廣播方式
Intent mIntent=new Intent("com.activity.MainActivity");
//這裡的intent(action...) 對應的是一個自定義的唯一字串,用來與接收廣播端一一對應。
context.sendBroadcast(mIntent);//傳送廣播

高版本安卓系統8.1.0廣播

。。。。

Intent mIntent=new Intent("com.activity.MainActivity");

//mIntent.setComponent。。。用來解決安卓8.1.0無法接受到廣播的問題。注意接收方如果為內部類則用$符號分割

mIntent.setComponent(new

ComponentName(context,"com.activity.MainActivity$MessageReceiver"));//注意接收方如果為內部類則用$符號分割

context.sendBroadcast(mIntent);//傳送廣播

廣播接收端是內部類

<!--靜態註冊廣播-->AndroidManifest.xml
<receiver android:name=".MainActivity$MessageReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <!--自定義action-->
        <action android:name="com.activity.MainActivity"/>
    </intent-filter>
</receiver>
接收廣播的是activity裡的內部類MessageReceiver

public class MainActivity extends Activity {

。。。。。。。。。。。。。

public static class MessageReceiver extends BroadcastReceiver
 {
    public MessageReceiver(){

    }
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        if (intent.getAction().equals(“com.activity.MainRongActivity”)) {
.......
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent);
            }
        }
    }
}

。。。。。。}

這樣之後不管是高版本還是低版本安卓系統都能收到廣播了