gpt4 book ai didi

android - BroadcastReceiver/Widget 自定义 Intent 过滤器自行触发

转载 作者:行者123 更新时间:2023-11-30 02:27:44 26 4
gpt4 key购买 nike

我正在尝试创建一个主屏幕小部件,并通过从服务(服务尚未实现)广播定期更新它,如下所示的 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";

在小部件类中,我覆盖了 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 方法中将 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 个只是继续触发,如果我在 list 中指定这 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);
}

最佳答案

仔细查看您的switch 语句。你不能打开字符串。 bytecharintshort 是您唯一可以打开的东西。

关于android - BroadcastReceiver/Widget 自定义 Intent 过滤器自行触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27713630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com