android广播

1.动态广播(动态注册),

电池电量,USB是否插入,可以取消广播(减少资源),
要添加对应的权限,获取电量,就要电量相关的权限

在这里插入图片描述

2.静态广播

1.开关机

开机就会执行,不用启动应用,缺点是,一开机就会启动,浪费资源
静态广播来监察开关机
步骤:设置权限–>声明广播–>广播接收
在这里插入图片描述

2.应用安装卸载

声明广播

<!-- 监听应用卸载安装 -->
        <receiver android:name=".AppStateChangeReceiver">
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <action android:name="android.intent.action.PACKAGE_ADDED" />

                <data android:scheme="package" />
            </intent-filter>
        </receiver>

编写广播信息

public class AppStateChangeReceiver extends BroadcastReceiver {
    private static final String TAG = "AppStateChangeReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(Intent.ACTION_PACKAGE_ADDED)) {
            Log.d(TAG, "onReceive: 应用安装了,它的信息是"+intent.getData());
        }else if (action.equals(Intent.ACTION_PACKAGE_REMOVED)){
            Log.d(TAG, "onReceive: 应用卸载了"+intent.getData());
        }
    }
}

3.自定义广播

发送自定义广播
com.example.broadcastreceiver.SEND_MSG是自定义的,要与声明的那里保存一致

//我们去发送广播
        Intent intent=new Intent();

        intent.setAction("com.example.broadcastreceiver.SEND_MSG");//设置动作,类似一个标记,这里是自定义的
        intent.putExtra(Constants.KEY_CONTENT,"sunweihao");
        //发送广播
        sendBroadcast(intent);

接收广播执行逻辑

public class MessageReceiver extends BroadcastReceiver {
    private static final String TAG = "MessageReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Log.d(TAG, "onReceive: action is -->"+action);
        Log.d(TAG, "onReceive: content is -->"+intent.getStringExtra(Constants.KEY_CONTENT));
    }
}

声明广播

<receiver android:name=".MessageReceiver">
            <intent-filter>
                <action android:name="com.example.broadcastreceiver.SEND_MSG" />
            </intent-filter>
        </receiver> 

有序广播

1.关键概念

  1. 优先级(-1000~1000):越大越先执行
  2. 可中断:中断后,后面的就不会接收到
  3. 可修改:修改后,后面的内容将发送改变

2.步骤:

创建三个广博:其中android:priority="0"表示设置优先级为0

<!-- 有序广播 -->
        <receiver android:name=".HighLevelReceiver">
            <intent-filter android:priority="1000">
                <action android:name="com.sunfbeaches.broadcastdemoforcourse.OREDR_BROADCAST" />
            </intent-filter>
        </receiver>
        <receiver android:name=".DefaultLevelReceiver">
            <intent-filter android:priority="0">
                <action android:name="com.sunfbeaches.broadcastdemoforcourse.OREDR_BROADCAST" />
            </intent-filter>
        </receiver>
        <receiver android:name=".LowLevelReceiver">
            <intent-filter android:priority="-1000">
                <action android:name="com.sunfbeaches.broadcastdemoforcourse.OREDR_BROADCAST" />
            </intent-filter>
        </receiver>

编写接收逻辑代码:

/**
 * author:sunweihao
 * 创建时间:2021/3/29 15:28
 * Describe:
 */
public class HighLevelReceiver extends BroadcastReceiver {
    private static final String TAG = "HighLevelReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "onReceive: HighLevelReceiver");
//        abortBroadcast();//终止广播
        //打印原来的广播内容
        Bundle resultExtras=getResultExtras(true);
        String content = resultExtras.getCharSequence("content").toString();
        Log.d(TAG, "onReceive: content-->"+content);
        //修改广播内容
        resultExtras.putCharSequence("content","我是修改过的广播内容");
        setResultExtras(resultExtras);
    }
}
/**
 * author:sunweihao
 * 创建时间:2021/3/29 15:30
 * Describe:
 */
public class DefaultLevelReceiver extends BroadcastReceiver {
    private static final String TAG = "DefaultLevelReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "onReceive: DefaultLevelReceiver");
        Bundle resultExtras=getResultExtras(true);
        String content = resultExtras.getCharSequence("content").toString();
        Log.d(TAG, "onReceive: content-->"+content);
    }
}
/**
 * author:sunweihao
 * 创建时间:2021/3/29 15:30
 * Describe:
 */
public class DefaultLevelReceiver extends BroadcastReceiver {
    private static final String TAG = "DefaultLevelReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "onReceive: DefaultLevelReceiver");
        Bundle resultExtras=getResultExtras(true);
        String content = resultExtras.getCharSequence("content").toString();
        Log.d(TAG, "onReceive: content-->"+content);
    }
}

发送有序广播

Intent intent = new Intent();
        intent.setAction(Constants.ACTION_ORDER_BROADCAST_TEST);
        Bundle bundle=new Bundle();
        bundle.putCharSequence("content","我是被发送的广播内容...");

        sendOrderedBroadcast(intent, null,null,null, Activity.RESULT_OK,null,bundle);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值