2010-04-09 31 views
1

我希望我的小部件在手机方向更改时进行更新。在android 2.0之前,你可以注册自己的widget以获得改变方向的意图Android - 如何让小部件识别手机方向已更改

<intent-filter> 
    <action android:name="android.intent.action.CONFIGURATION_CHANGED" /> 
</intent-filter> 

但是2.0之后你不能这样做。 Android开发医生说:

你不能用 Context.registerReceiver明确注册它通过舱单申报 组件,收到此仅 ()。

好建议尝试注册它,但不能在AppWidgetProvider中注册接收器。

我只是想知道手机何时切换方向,以便我可以在垂直空间上运行时向用户正确显示一些文本。

+0

检查出这个问题的答案:http://stackoverflow.com/questions/2435548/how-to-detect-orientation-change-in-home-screen-widget – 2010-04-09 20:05:31

+0

另外,请记住,主屏幕不一定会改变方向。例如,无论设备的物理位置如何,Nexus One都具有纵向的主屏幕。调整你的用户界面不必太在意定位和垂直空间,你会更好。 – CommonsWare 2010-04-09 21:06:35

+0

谢谢你们,我很想。我试图布局景观的东西,但仍然无法让它仍然处理我的小部件布局。再次感谢。 – 2010-04-10 05:05:55

回答

0

您可以创建一个服务,它注册到CONFIGURATION_CHANGED事件,像这样

public class MyService extends Service { 


@Override 
public void onCreate() { 
    super.onCreate(); 

    BroadcastReceiver bReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      refreshWidget(); // Code to refresh the widget 
     } 
    }; 

    IntentFilter intentFilter = new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED); 
    registerReceiver(bReceiver, intentFilter); 

`}

+1

我想我正在按照您的建议进行操作:https://gist.github.com/daviddoria/80c9c5dc98913b54bf00但onReceive从未被调用过?如果我更改私人IntentFilter intentFilter =新IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED);私人IntentFilter intentFilter =新的IntentFilter(“android.intent.action.TIME_TICK”),onReceive每分钟都会被调用。还有什么我必须做的,以获得配置更改触发意图,所以我可以收到它? – 2013-10-08 18:35:30