【问题标题】:How can I listen to Intent.ACTION_CONFIGURATION_CHANGED broadcasts in a widget?如何在小部件中收听 Intent.ACTION_CONFIGURATION_CHANGED 广播?
【发布时间】:2014-03-24 10:03:40
【问题描述】:

我开发了一个带有ImageButton 的小部件,它可以切换自动旋转设置。一切正常,按下按钮时设置切换。问题是我不知道如何列出到Intent.ACTION_CONFIGURATION_CHANGED,以便在从我的小部件以外的其他来源启用/禁用设置时按钮更改其状态。

我浏览了文档,我知道我无法在 Manifest 中注册意图过滤器操作 android.intent.action.CONFIGURATION_CHANGED,并且必须使用 Context.registerReceiver (BroadcastReceiver receiver, IntentFilter filter) 动态注册此意图过滤器。

我尝试创建一个扩展BroadcastReceiver 的新类,然后在onUpdate() 方法中注册接收器,但它不起作用。

这是我尝试过的代码:

BroadcastReceiver 类:

public class ConfigurationIntentReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
    if(intent.getAction().equals("android.intent.action.CONFIGURATION_CHANGED")){
        if  (android.provider.Settings.System.getInt(context.getContentResolver(),Settings.System.ACCELEROMETER_ROTATION, 0) == 1){
            remoteViews.setImageViewResource(R.id.widget_autorotate, R.drawable.ic_widget_autorotate_on);
        } else {
            remoteViews.setImageViewResource(R.id.widget_autorotate, R.drawable.ic_widget_autorotate_off);
        }   
        WidgetProvider.pushWidgetUpdate(context.getApplicationContext(), remoteViews);

    }
}
}

这里是 AppWidgetProvider 类:

public class WidgetProvider extends AppWidgetProvider {



@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {

    context.getApplicationContext().registerReceiver(new ConfigurationIntentReceiver(), new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED));
    pushWidgetUpdate(context, remoteViews);
}

ConfigurationIntentReceiver 组件尚未根据 Android 文档在 Manifest 中声明。

如果有人能指出正确的方向,我将不胜感激。

【问题讨论】:

  • 你有什么问题?
  • 问题是,如果我从手机设置中切换自动旋转,小部件不会更新,从而反映了自动旋转的正确状态。

标签: android settings autorotate


【解决方案1】:

您只能注册到这样的意图,因此您必须通过前台服务(或 Activity,但它们会死掉,并且您不想让小部件停止获取它)。

https://developer.android.com/reference/android/content/Intent.html#ACTION_CONFIGURATION_CHANGED

【讨论】: