第二卷 Broadcast Receiver

2019-01-12  本文已影响5人  Android师哥
NightRain.png

2.1全局广播

2.1.1广播类型

2.1.2广播注册方式

2.1.3发送标准广播

private class MBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //逻辑代码
        Toast.makeText(MainActivity.this, "动态注册", Toast.LENGTH_LONG).show();
    }
}
public class StaticReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //逻辑代码
        Toast.makeText(context, "静态注册", Toast.LENGTH_SHORT).show();
    }
}

动态注册

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mMBroadcastReceiver = new MBroadcastReceiver();
    IntentFilter mIntentFilter = new IntentFilter();
    mIntentFilter.addAction("com.nightrain.broadcastreceiverdemo.standard");
    registerReceiver(mMBroadcastReceiver, mIntentFilter);
}
@Override
protected void onDestroy() {
    super.onDestroy();
    if (mMBroadcastReceiver != null) {
        //动态注册记得注销
        unregisterReceiver(mMBroadcastReceiver);
    }
}

静态注册

在AndroidManifest文件中注册

<receiver
    android:name=".StaticReceiver"
    android:enabled="true"
    android:exported="true">
        <intent-filter>
            <action android:name="com.nightrain.broadcastreceiverdemo.standard">
        </intent-filter>
</receiver>
Intent mIntent = new Intent();
mIntent.setAction("com.nightrain.broadcastreceiverdemo.standard");
mIntent.setPackage(getPackageName());
sendBroadcast(mIntent);

2.1.4发送有序广播

private class MBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //逻辑代码
        Toast.makeText(MainActivity.this, "动态注册", Toast.LENGTH_LONG).show();
    }
}
public class StaticReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //逻辑代码
        Toast.makeText(context, "静态注册", Toast.LENGTH_SHORT).show();
        //拦截广播
        abortBroadcast();
    }
}

动态注册

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mMBroadcastReceiver = new MBroadcastReceiver();
    IntentFilter mIntentFilter = new IntentFilter();
    mIntentFilter.addAction("com.nightrain.broadcastreceiverdemo.standard");
    registerReceiver(mMBroadcastReceiver, mIntentFilter);
}
@Override
protected void onDestroy() {
    super.onDestroy();
    if (mMBroadcastReceiver != null) {
        //动态注册记得注销
        unregisterReceiver(mMBroadcastReceiver);
    }
}

静态注册

在AndroidManifest文件中注册(这次在静态广播中添加优先级)

<receiver
    android:name=".StaticReceiver"
    android:enabled="true"
    android:exported="true">
        <intent-filter android:priority="100">
            <action android:name="com.nightrain.broadcastreceiverdemo.standard">
        </intent-filter>
</receiver>
Intent mIntent = new Intent();
mIntent.setAction("com.nightrain.broadcastreceiverdemo.standard");
mIntent.setPackage(getPackageName());
sendOrderedBroadcast(mIntent, null);

2.2本地广播

private class MLocalBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //逻辑代码
        Toast.makeText(MainActivity.this, "本地广播", Toast.LENGTH_LONG).show();
    }
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //获取本地广播管理器
    mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
    mMLocalBroadcastReceiver = new MLocalBroadcastReceiver();
    IntentFilter mLocalIntentFilter = new IntentFilter();
    mLocalIntentFilter.addAction("com.nightrain.broadcastreceiverdemo.local");
    //注册广播
    mLocalBroadcastManager.registerReceiver(mMLocalBroadcastReceiver, mLocalIntentFilter);
}
@Override
protected void onDestroy() {
    super.onDestroy();
    if (mLocalBroadcastManager != null && mMLocalBroadcastReceiver != null) {
        //注销广播
        mLocalBroadcastManager.unregisterReceiver(mMLocalBroadcastReceiver);
    }
}
Intent mIntent = new Intent();
mIntent.setAction("com.nightrain.broadcastreceiverdemo.local");
mLocalBroadcastManager.sendBroadcast(mIntent);

2.3结语

上一篇下一篇

猜你喜欢

热点阅读