我遇到这样的问题-"我的广播"没有收到任何信息。我做错了什么?
代码示例
我的广播注册活动:
主要活动
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);
您应该使用Bundle
从intent
接收数据,如下所示:
@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值。