考虑这种情况,涉及三个类别:这是一个警报应用程序,您想在警报服务打开时显示一个按钮,而在警报关闭时隐藏它。我想让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"));
这是发送广播以显示按钮的代码片段,对于上下文,这是在接收器类中和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的初学者,如果遇到一个菜鸟问题,则表示抱歉。
答案 0 :(得分:0)
是您传递的意图,您应该从中提取数据,
所以也许不像这样调用 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>
或者直接是如果它是您的Activity的子代:
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,因此,除了将可见性作为字符串传递之外,您还可以将它直接作为int传递。
intentShowButtonMatikan.putExtra("visibility", View.VISIBLE); //Or View.GONE;
在广播中,您无需检查字符串,您可以使用设置直接可见性:
visibilty = intent.getIntExtra("visibility", View.GONE /* <-- Default value*/);
view.setVisibility(visibilty);