我正在尝试创建一个主屏幕窗口小部件,并通过广播从服务(服务尚未实施)定期更新它,下面显示了4个操作字符串。
public final static String BATTERY_UPDATE = "com.app.MyApp.action.BATTERY_UPDATE";
public final static String CPU_UPDATE = "com.app.MyApp.action.CPU_UPDATE";
public final static String SYSTEM_UPDATE = "com.app.MyApp.action.SYSTEM_UPDATE";
public final static String RAM_UPDATE = "com.app.MyApp.action.RAM_UPDATE";
在widget类中,我重写了on receive方法:
@Override
public void onReceive(Context context, Intent intent) {
switch(intent.getAction()){
case BATTERY_UPDATE:
Log.i("Widget", "Battery Update");
break;
case CPU_UPDATE:
Log.i("Widget", "CPU Update");
break;
case RAM_UPDATE:
Log.i("Widget", "RAM Update");
break;
case SYSTEM_UPDATE:
Log.i("Widget", "System Update");
break;
case Intent.ACTION_SCREEN_OFF:
Log.i("Widget", "Screen Off");
break;
}
super.onReceive(context, intent);
}
到目前为止一直很好,但是,只要我在onUpdate方法中向widget添加了intent过滤器,我就会突然开始接收器广播,每隔5秒左右使用我在上面指定的动作字符串,下面是on接收方法
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
Log.i("Widget", "onUpdate");
Context c = context.getApplicationContext();
IntentFilter filter1 = new IntentFilter();
filter1.addAction(Intent.ACTION_SCREEN_OFF);
filter1.addAction(CPU_UPDATE);
filter1.addAction(BATTERY_UPDATE);
filter1.addAction(SYSTEM_UPDATE);
filter1.addAction(RAM_UPDATE);
c.registerReceiver(this, filter1);
}
添加的第一个动作(Intent.ACTION_SCREEN_OFF)工作正常,我只在屏幕关闭时收到一个广播,但是其他4个只是继续发射,如果我在清单中指定了这4个动作,也会发生这种情况。有人可以向我解释这里发生了什么,当我从未发送广播时,我如何接收带有我定义的动作字符串的广播?
编辑:所以我将编译器合规性级别更改为1.6,我仍然收到广播,这里是编辑后的代码:
@Override
public void onReceive(Context context, Intent intent) {
// switch(intent.getAction()){
//
// case BATTERY_UPDATE:
// Log.i("Widget", "Battery Update");
// break;
//
// case CPU_UPDATE:
// Log.i("Widget", "CPU Update");
// break;
//
// case RAM_UPDATE:
// Log.i("Widget", "RAM Update");
// break;
//
// case SYSTEM_UPDATE:
// Log.i("Widget", "System Update");
// break;
//
// case Intent.ACTION_SCREEN_OFF:
// Log.i("Widget", "Screen Off");
// break;
// }
Log.i("Widget", intent.getAction());
super.onReceive(context, intent);
}
答案 0 :(得分:1)
仔细查看您的switch
声明。你无法打开字符串。 byte
,char
,int
,short
是您可以开启的唯一内容。
答案 1 :(得分:0)
我刚刚重新启动手机,所有问题现在似乎都已解决