【问题标题】:Widget refresh from inside application从应用程序内部刷新小部件
【发布时间】:2018-10-06 13:55:53
【问题描述】:

美好的一天!我想将文本从应用程序内部添加到小部件,我有一个主要活动,它有列表视图和大量文本内容,它有一个按钮可以通过共享首选项将文本添加到小部件,当我关闭小部件时它工作正常,并且仅重新创建它,否则它不会自动刷新。如果有人知道;如何解决这个问题请帮助我。这里我附上了下面的小部件代码。

    public class WidgetMaster extends AppWidgetProvider {

    static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                            int appWidgetId) {

    Intent intentHome = new Intent(context, MainActivity.class);
    PendingIntent pendingIntentHome = PendingIntent.getActivity(context, 0, intentHome, 0);

    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_master);

    views.setOnClickPendingIntent(R.id.wid_home, pendingIntentHome);

    final SharedPreferences sharedPreferencestoWi = context.getSharedPreferences(String.valueOf(R.string.addTextToWidgetPref), MODE_PRIVATE);
    String forWidget = sharedPreferencestoWi.getString("textToWidget", "");
    String dum = "add from reading";
    if(forWidget.equals("")){
        views.setTextViewText(R.id.dum_appwidget_text, dum);
        appWidgetManager.updateAppWidget(appWidgetId, views);
    } else {
        views.setTextViewText(R.id.appwidget_text, forWidget);
        views.setViewVisibility(R.id.appwidget_text, 0);
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }

}

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    // There may be multiple widgets active, so update all of them
        for (int appWidgetId : appWidgetIds) {
            updateAppWidget(context, appWidgetManager, appWidgetId);
        }

}

@Override
public void onEnabled(Context context) {
    // Enter relevant functionality for when the first widget is created
}

@Override
public void onDisabled(Context context) {
    // Enter relevant functionality for when the last widget is disabled
}

}

【问题讨论】:

    标签: android listview widget sharedpreferences android-widget


    【解决方案1】:

    如何从 mainActivity 更新小部件?

    在小部件配置文件中,您可以指定固定的更新间隔。最小更新间隔为 1800000 毫秒(30 分钟)。

    但最好以编程方式更新小部件,为此您应该发送一个广播来更新小部件并使用 诸如用于重复任务的alarmManager 或Handler 之类的方法
    例如,您可以使用以下broadCast 来更新小部件表单mainActivity:

    Intent intent = new Intent(this, WidgetMaster.class);
    intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);                   
    
    int[] ids = AppWidgetManager.getInstance(getApplication())
                          .getAppWidgetIds(new ComponentName(getApplication(),WidgetMaster.class));
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
    sendBroadcast(intent);
    

    【讨论】:

      猜你喜欢
      • 2021-01-15
      • 1970-01-01
      • 2019-09-05
      • 2011-06-06
      • 2017-02-19
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多