![](/img/trans.png)
[英]BroadcastReceiver in MainActivity does not receive Broadcast Intents
[英]BroadcastReceiver from MainActivity does not receive extra
考虑这种情况,涉及三个类:这是一个警报应用程序,您希望在警报服务打开时显示一个按钮,并在警报关闭时隐藏它。 我希望MainActivity中的BroadcastReceiver从其他两个类中获取额外的内容,以确定是否应该显示或隐藏按钮。
这是我在MainActivity中的BroadcastReceiver,buttonVisibility应该是接收额外的东西。
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (getIntent().getExtras() != null) {
buttonVisibility = getIntent().getStringExtra("visibility");
switch (buttonVisibility) {
case "visible":
showButtonMatikanAlarm();
break;
case "gone":
hideButtonMatikanAlarm();
break;
default:
//do nothing
break;
}
}
}
};
在onCreate
方法我已经注册了broadcastReceiver:
registerReceiver(broadcastReceiver, new IntentFilter("anim button"));
这是发送广播到show按钮的代码片段,对于上下文,这是在接收器类和onRecieve
方法内:
Intent intentShowButtonMatikan = new Intent("anim button");
intentShowButtonMatikan.putExtra("visibility", "visible");
context.sendBroadcast(intentShowButtonMatikan);
将广播发送到隐藏按钮的代码,对于上下文,它驻留在对话框类中的方法中。 单击对话框的按钮时,应发送额外的:
Intent intentHideButtonMatikan = new Intent("anim button");
intentHideButtonMatikan.putExtra("visibility", "gone");
getContext().sendBroadcast(intentHideButtonMatikan);
当代码运行时,调用BroadcastReciever但从不获取额外的内容, buttonVisibility
返回null。 怎么了?
任何帮助将不胜感激。 我是Android的首发,对不起,如果它是一个noob问题。
你的方法内部onReceive(Context context, Intent intent )是你应该从中提取数据的传递意图,
所以也许不是调用getIntent()直接从intent中提取数据,如下所示:
if (intent.getExtras() != null) {
buttonVisibility = intent.getStringExtra("visibility"); }
因为通过调用getIntent(),你得到的是启动活动而不是接收者的Intent。
但发送广播的正确方法是这样的 :
在你的舱单登记册中:
<receiver android:name=".YourReceiver" android:enabled="true"> <intent-filter> <action android:name="broad.cast.action.visibility" /> </intent-filter> </receiver>
或直接,如果它是您的活动的孩子:
registerReceiver(broadcastReceiver, new IntentFilter("broad.cast.action.visibility"));
初始化你的意图:
Intent yourIntent = new Intent("broad.cast.action.visibility"); yourIntent.putExtra("visibility", "visible"); sendBroadcast(yourIntent);
获取数据:
public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("broad.cast.action.visibility")){ buttonVisibility = intent.getStringExtra("visibility"); switch (buttonVisibility) { case "visible": showButtonMatikanAlarm(); break; case "gone": hideButtonMatikanAlarm(); break; default: //do nothing break; } } }
注意 ,视图可见性是一个int,因此您可以将其作为字符串直接传递,而不是将可见性作为字符串传递。
intentShowButtonMatikan.putExtra("visibility", View.VISIBLE); //Or View.GONE;
在你的广播中,你不需要检查字符串,你可以使用以下方法直接设置可见性:
visibilty = intent.getIntExtra("visibility", View.GONE /* <-- Default value*/);
view.setVisibility(visibilty);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.