[英]My android homescreen widget appears, but is not updating
我已經找到了其他與我類似的問題,但是找不到解決方案。 我有一個帶有簡單TextView
和配置Activity
的自定義窗口小部件。 問題是:
將小部件添加到主屏幕后,將顯示配置活動,但是一旦創建了配置活動, AppWidgetProvider
onUpdate()
方法將立即運行。 它應在按OK按鈕關閉配置活動后運行。
即使onUpdate()
方法在配置活動開始時運行(根據該方法中的Toast,顯示textview的正確數據),TextView仍然不會更新。
即使android:updatePeriodMillis設置為1000ms,onUpdate方法也只能運行一次-配置活動開始時。
當我將小部件添加到主屏幕然后重新啟動手機時,小部件的TextView最終會在適當的時間更新,但只有一次。
許多用戶在最近的Android版本(例如4.4)上報告了類似的問題。 對於這種不良行為,是否有任何最終解決方案?
這是我的文件-清單:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="incredible.riskofrain.app">
<application android:allowBackup="true"
android:label="@string/app_name"
android:icon="@drawable/main_icon">
<receiver android:name=".RORAppWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/ror_appwidget_info" />
</receiver>
<activity android:name=".RORAppWidgetConfigure">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
<activity android:name="incredible.riskofrain.app.MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
appwidget_info:
android:minWidth="200dp"
android:minHeight="80dp"
android:updatePeriodMillis="1000"
android:initialLayout="@layout/ror_appwidget"
android:configure="incredible.riskofrain.app.RORAppWidgetConfigure"
android:resizeMode="horizontal|vertical"
android:widgetCategory="home_screen" >
AppWidgetProvider:
public class RORAppWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
Calendar c = Calendar.getInstance();
String time = "" + c.get(Calendar.MINUTE)+ ":" + c.get(Calendar.SECOND);
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.ror_appwidget);
views.setTextViewText(R.id.textview, time);
appWidgetManager.updateAppWidget(appWidgetId, views);
Toast.makeText(context, "onUpdate " + time + " " + appWidgetId, Toast.LENGTH_LONG).show();
}
}}
AppWidgetConfigure:
public class RORAppWidgetConfigure extends Activity {
int appWidgetId; Button button; AppWidgetManager appWidgetManager;
RemoteViews views;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.ror_configure);
button = (Button) findViewById(R.id.button);
appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
Bundle extras = getIntent().getExtras();
if (extras != null) {
appWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
views = new RemoteViews(getPackageName(), R.layout.ror_appwidget);
appWidgetManager.updateAppWidget(appWidgetId, views);
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
setResult(RESULT_OK, resultValue);
Toast.makeText(getApplication().getApplicationContext(), "Configure, ID: - " + appWidgetId+"", Toast.LENGTH_LONG).show();
finish();
}
});
super.onCreate(savedInstanceState);
}}
您可以使用broasdcast Receiver更新小部件。
檢查此鏈接:
<!-- Broadcast Receiver that will process AppWidget updates -->
<receiver android:name=".WordWidget" android:label="@string/widget_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_word" />
</receiver>
我希望它對您有用。
我在文檔中找到了這個,可能是這個問題:
public int updatePeriodMillis在API級別3中添加了此AppWidget想要更新的頻率(以毫秒為單位)。 AppWidget管理器可能會限制AppWidget更新的頻率。 此字段對應於AppWidget元數據文件中的android:updatePeriodMillis屬性。 注意:使用updatePeriodMillis請求的更新不會每30分鍾交付一次。
我還發現android框架中存在一個巨大的錯誤,使得配置活動無效: https : //code.google.com/p/android/issues/detail?id=3696
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.