Android--广播机制

  • 1:静态注册广播

示例: 监听网络变化
权限申请
在onCreate方法中:初始化绑定

mIntentFilter = new IntentFilter();
mIntentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
mNetworkchange = new NetworkChangeReceiver();
registerReceiver(mNetworkchange,mIntentFilter);

接收者:

 class NetworkChangeReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {

            ConnectivityManager connectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netWorkInfo = connectionManager.getActiveNetworkInfo();
            if (netWorkInfo != null && netWorkInfo.isAvailable()){
                Toast.makeText(context, "network able", Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(context, "network enable", Toast.LENGTH_SHORT).show();
            }

        }
    }
  • 2:发送自定义标准广播 BootCompleteReceiver(需要在AndroidManifest.xml配置)

在onCreate方法中:初始化绑定

mIntentFilter = new IntentFilter();
mIntentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
mNetworkchange = new NetworkChangeReceiver();
registerReceiver(mNetworkchange,mIntentFilter);

接收器:

public class BootCompleteReceiver extends BroadcastReceiver {


    public BootCompleteReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {

        Toast.makeText(context, "Boot complete", Toast.LENGTH_SHORT).show();
        Log.e("chenxh","Boot   ");

    }

}

设置触发点击 Intent隐式发送:

 Intent intent = new Intent("com.study.test.testapplication.receiver.MY");
                sendBroadcast(intent,null);
  • 3:发送有序广播 优先级:priority 拦截广播:abortBroadcast();

当多个广播,需要按照顺序传递信息时,需要在清单文件中,表明字段priority值

 <receiver
            android:name=".receiver.AnthorBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="100">
                <action android:name="com.study.test.testapplication.receiver.MY"/>
            </intent-filter>
        </receiver>

发送时,使用sendOrderedBroadcast方法:

 sendOrderedBroadcast(intent,null);

如果需要截取到某个广播,可以使用abortBroadcast方法

 @Override
    public void onReceive(Context context, Intent intent) {

        Toast.makeText(context, "received in AnthorBroadcastReceiver", Toast.LENGTH_SHORT).show();
        Log.e("chenxh","AnthorBroadcastReceiver");
        abortBroadcast();

    }
  • 4:使用本地广播(安全):
    有接接收者、广播管理器、过滤器,管理器绑定接收者 过滤器,

完整上代码:

package com.study.test.testapplication.receiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;

import com.study.test.testapplication.R;

/**
 * 1:静态注册 监听网络变化
 * 2:发送自定义标准广播 BootCompleteReceiver(需要在AndroidManifest.xml配置)
 * 3:发送有序广播 优先级:priority   拦截广播:abortBroadcast();
 *
 * 安全的
 * 4:使用本地广播:
 *   有接接收者、广播管理器、过滤器,管理器绑定接收者 过滤器,
 *
 *
 *
 */


public class BroadCastActivity extends AppCompatActivity {

    private IntentFilter mIntentFilter;

//    4 本地广播
    private LocalBroadcastManager mLocalBroadcastManager;
    private LocalReceiver mLocalReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_broad_cast);

//        本地广播管理器
        mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
//        过滤器
        mIntentFilter = new IntentFilter();
        mIntentFilter.addAction("com.local.dsy");
//        广播接收者
        mLocalReceiver = new LocalReceiver();
//        广播并添加过滤器
        mLocalBroadcastManager.registerReceiver(mLocalReceiver,mIntentFilter);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mLocalBroadcastManager.unregisterReceiver(mLocalReceiver);
    }

    public void sendBroad(View view) {

        switch (view.getId()){
            case R.id.send_diy_btn:

                Intent intent = new Intent("com.local.dsy");
                mLocalBroadcastManager.sendBroadcast(intent);

                break;
        }

    }


//    接收者
    class LocalReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "YES my love lady", Toast.LENGTH_SHORT).show();
        }
    }


}

猜你喜欢

转载自blog.csdn.net/Mr_ChenXu/article/details/80572543