Android 广播BroadcastReceiver

发送广播

    public static void sendBroadcast(Context context) {
        Intent intent = new Intent("com.xxx.xxx");
        intent.putExtra("key", "value");
        context.sendBroadcast(intent);
    }

通过 context.sendBroadcast() 发送无序广播

通过 context.sendOrderedBroadcast() 发送有有序广播

无序广播

无序广播将在发送后同时传递给接收者,无法区分先后顺序,无法终止,但是传递效率较高

有序广播

有序广播的接收者,将按照定义的优先级顺序依次接收广播,并且可以将结果等信息向下传递,也可以中断广播使后面的接收者都接收不到广播。

接收广播

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        intent.getStringExtra("xxx");
    }

}

注册广播分为两种:

代码动态注册:

        MyBroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();
        IntentFilter itFilter = new IntentFilter();
        itFilter.addAction("com.xxx.xxx");
        itFilter.setPriority(1000); // 设置优先级
        context.registerReceiver(myBroadcastReceiver, itFilter);

        // 解除注册
        context.unregisterReceiver(myBroadcastReceiver);

动态注册有个缺点就是需要app启动才可以接收广播,xml文件注册,不需要启动app也能接收广播

xml文件静态注册:

        <receiver android:name=".MyBroadcastReceiver">
            <intent-filter android:priority="1000">
                <action android:name="com.xxx.xxx" />
            </intent-filter>
        </receiver>

priority 属性是广播的优先级,取值范围为 -1000~1000

有序广播

中断广播

    abortBroadcast();

向后传值

        Bundle bundle = new Bundle();
        bundle.putString("key", "xxx");
        setResultExtras(bundle);

接收参数

        Bundle bundle = getResultExtras(true);
        bundle.getString("key");

利用广播实现开机启动

manifest 标签下:

    <!--.接收启动完成的广播权限-->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />  

application 标签下:

        <!--开机自启动广播-->
        <receiver android:name=".broadcast.BootBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="1000">
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;

/**
 * 开机自启动广播
 */
public class BootBroadcastReceiver extends BroadcastReceiver {

    static final String ACTION = "android.intent.action.BOOT_COMPLETED";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (TextUtils.equals(intent.getAction(), ACTION)) {
            L.i("接收到开机广播:" + intent.getAction() + "    ACTION:" + ACTION);
            Intent newIntent = new Intent(context, HomeActivity.class);
            newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(newIntent);
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值