安卓广播不起作用



我遇到这样的问题-"我的广播"没有收到任何信息。我做错了什么?


代码示例
我的广播注册活动:
主要活动

        DriverCheckBroadcast broadcast = new DriverCheckBroadcast(this);
    IntentFilter intFilt = new IntentFilter("MY_BROADCAST_CHECK");
    // регистрируем (включаем) BroadcastReceiver
    registerReceiver(broadcast, intFilt);
    startService(new Intent(this, DriverCheckService.class));


将包裹放入广播的方法

@Override
        public void onResponse(Response<Example> response, Retrofit retrofit) {
            Example result = response.body();
            LatLng driverlatlang = new LatLng(result.getGpsLatitude(),result.getGpsLongitude());
            intent.putExtra("address",customizeText(result.getAddress()));
            intent.putExtra("latlng",driverlatlang);
            intent.putExtra("model",result.getModel().getName());
            intent.putExtra("brand",result.getModel().getIdBrand());
            status = result.getStatusName();
            service.sendBroadcast(intent);
        }


在广播中获取包裹的方法

@Override
public void onReceive(Context context, Intent intent) {
    activity.driverlatlang = intent.getParcelableExtra("latlang");
    activity.model.setText((CharSequence) intent.getParcelableExtra("model"));
    activity.brand.setText((CharSequence) intent.getParcelableExtra("brand"));
    activity.address.setText((CharSequence) intent.getParcelableExtra("address"));
}

发送广播时需要设置操作。

试试这个

Intent intent = new Intent();
intent.setAction("MY_BROADCAST_CHECK");

因为你的接收器方面类型:MY_BROADCAST_CHECK,但当你发送广播时,你没有给出任何信息,这就是为什么你的接收器没有得到任何信息。

创建意图并以这种方式发送广播

Intent i = new Intent("a");
Bundle bundle = new Bundle();
bundle.putString(USER_ID, user_id);
i.putExtras(bundle);
mContext.sendBroadcast(i);

意向声明过滤器

IntentFilter filter = new IntentFilter();
filter.addAction("a");
filter.addAction("b");
filter.addAction("c");

接收广播

registerReceiver(new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    try {
                        if(intent.getAction().equals("a"))
                        goToPage(new a());
                        if(intent.getAction().equals("b"))
                        {
                          // you can call other event and function here
                            Fragment fragment = new b();
                            Bundle bundle = intent.getExtras();
                            fragment.setArguments(bundle);
                            goToPage(fragment);
                        }
                        if(intent.getAction().equals("c"))
                        {
                           // you can call other event and function here
                            Fragment fragment = new c();
                            Bundle bundle = intent.getExtras();
                            fragment.setArguments(bundle);
                            goToPage(fragment);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }, filter);

您应该使用Bundleintent接收数据,如下所示:

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Bundle extras = intent.getExtras();
 if (extras != null) {
   Object value1=extras.get("latlang");
   Object value2=extras.get("model");
   Object value3=extras.get("brand");
   Object value4=extras.get("address");
 }
} 

然后相应地CCD_ 4值。

最新更新