Android studio 注册自定义广播

 一、  注册广播的方式

注册广播的方式有两种。

  1. 静态注册:在AndroidManifest.xml中注册。
  2. 动态注册:在代码中注册。调用registerReceiver()注册。

二、静态注册

一、在AndroidManifest.xml中注册

receiver中:android:name="广播接收者的文件路径"

action中:android:name="自定义广播名称"

<application>
    <receiver
        android:name=".broadcastreceiver.MyReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="test_broadcast" />
        </intent-filter>
    </receiver>
</application>

二、发送广播

public class MainActivity extends AppCompatActivity {

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

        clicked();
    }

    public void clicked() {
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent  intent = new Intent();
                intent.setAction("test_broadcast"); // 这里要与注册的广播名一致
                intent.setPackage(getPackageName());
                intent.putExtra("send", "测试成功");
                sendBroadcast(intent);
            }
        });
    }
}

三、动态注册广播

动态注册自定义广播,需要注意的是在onDestroy()中调用unregisterReceiver()取消注册。

public class MainActivity extends AppCompatActivity {
    // 广播接收者
    MyReceiver myReceiver = new MyReceiver();

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 取消注册
        unregisterReceiver(myReceiver);
    }

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

        // 动态注册
        IntentFilter filter = new IntentFilter("com.hql.broadcasttest.MY_BROADCAST");
        // RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED 应该作为第三个参数flag传入且不能同时指定。
        registerReceiver(myReceiver, filter, RECEIVER_EXPORTED);

        clicked();
    }

    public void clicked() {
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("com.hql.broadcasttest.MY_BROADCAST");
                intent.putExtra("send", "测试成功");
                sendBroadcast(intent);
            }
        });
    }
}

四、广播接收者

自定义广播接收者需要继承BroadcastReceiver,重写onReceive()

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String message = intent.getStringExtra("send");
        Toast.makeText(context, "检测到意图:" + message, Toast.LENGTH_LONG).show();
    }
}

五、效果展示

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HQL_seven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值