2010-04-09 71 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