安卓自定义广播为什么会没有响应呢

当在学习安卓自定义广播为什么会接受不到广播呢?

在学习安卓的时候,会学习BroadcastReceiver,当自定义一个广播时,你会发现发送广播后没有接受成功后的指令。经过我的查找我才知道Android8.0后会限制使用AndroidManifest.xml来注册隐式广播。
经过学习和看大神的最终整合如下试图。
话不多说,直接上案例:
在发送广播之前,我们需要一个广播接收器来接受此广播,不然你发了也是白发。
先创建一个类如下:
在这里插入图片描述
然后在这个类继承自BroadcastReceiver,代码如下:

// An highlighted block
public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"received in MyBroadcastReceiver",Toast.LENGTH_SHORT).show();
    }

我做的是一个非常简单的案列,当接受到这个广播,会显示“ received in MyBroadcastReceiver”。
然后在AndroidManifest.xml内进行注册:

// An highlighted block
<receiver android:name=".MyBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter >
        <action android:name="com.example.broadcasttest.MY_BROADCAST"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</receiver>

其中的Enabled属性的作用是是否启动这个广播接受器。
Exported属性的作用是是否允许这个广播接收器接受本程序以外的广播。

在xml中定义一个按钮,这个案列比较简单,我就不一一列举出来了。
在mainactivity.java中的代码如下:

// An highlighted block
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button=(Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent("com.example.broadcasttest.MY_BROADCAST");
                intent.setComponent(new ComponentName(getPackageName(),"com.example.broadcastreceiver3.MyBroadcastReceiver"));
                sendBroadcast(intent);
            }
        });
    }
}

自定义广播接受器主要的是:
setComponent(new ComponentName(getPackageName(),“com.example.broadcastreceiver3.MyBroadcastReceiver”));
sendBroadcast(intent);
我自己感觉的是:当我们点击按钮会生成一个Intent实例,然后通过sendBroadcast(intent);发送广播信息,而setComponent的方法就是告诉系统你该发给谁,换句话说就是谁接受广播。第一个参数是目标广播接收器所在应用的包名,第二个参数是目标广播接收器类全路径。
这就是解决方案,(其中有大神的帮助)。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值