gpt4 book ai didi

java - 如何从小部件本身手动调用 `onUpdate`

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:02 28 4
gpt4 key购买 nike

public class VWid extends AppWidgetProvider {

public static String WIDGET_UPDATE = "WIDGET_UPDATE";

@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);

if (WIDGET_UPDATE.equals(intent.getAction())) {
Toast.makeText(context, "onReceiver()", Toast.LENGTH_LONG).show();
}
}

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;

// Perform this loop procedure for each App Widget that belongs to this
// provider
for (int i = 0; i < N; i++) {
int appWidgetId = appWidgetIds[i];
int k, p;
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy hh:mm a");

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int k = audioManager.getStreamVolume(AudioManager.STREAM_SYSTEM);
Toast.makeText(getActivity(), k+"", Toast.LENGTH_LONG).show();

Intent imageview2Intent= new Intent(context, VWid.class);
PendingIntent pendingIntent2= PendingIntent.getBroadcast(context,0, imageview2Intent,0);

views.setOnClickPendingIntent(R.id.imagebuttonrefresh, pendingIntent2); //

views.setTextViewText(R.id.textview1, "Last Refresh: " + dateFormat.format(new Date()).toString());

pushWidgetUpdate(context, views);
}
}

public static void pushWidgetUpdate(Context context, RemoteViews remoteViews) {
ComponentName myWidget = new ComponentName(context, VWid.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(myWidget, remoteViews);
Log.d("UPDATED", "testing");
}
}

当我第一次将小部件添加到主屏幕时,textview1 显示:Last Refresh: {current date and time}。它还在 Toast 中显示系统音量。

假设我增加/减少系统音量,当我点击刷新时,onUpdate() 函数应该触发显示更新的 Toast 并将 textview1 文本更新为新的数据和时间,但这并没有发生。

如何修改代码以便实现刷新,本质上是调用 onUpdate() 函数。

最佳答案

试试这个:

public class WidgetProvider extends AppWidgetProvider {

public static final String REFRESH_ACTION = "com.packagename.REFRESH_ACTION";

@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);

if (intent.getAction().equals(WidgetProvider.REFRESH_ACTION)) {
Bundle extras = intent.getExtras();
if (extras != null) {
int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);

if (appWidgetIds != null && appWidgetIds.length > 0) {
Toast.makeText(context, "REFRESH", Toast.LENGTH_SHORT).show();
this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);
}
}
}

}


@Override
public void onUpdate(final Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;


for (int i = 0; i < N; ++i) {

RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);

Intent intentServiceCall = new Intent(context, WidgetService.class);
intentServiceCall.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);

//Refresh
Intent refreshIntent = new Intent(context, WidgetProvider.class);
refreshIntent.setAction(WidgetProvider.REFRESH_ACTION);
refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
intentServiceCall.setData(Uri.parse(intentServiceCall.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, refreshIntent, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.ivRefreshWidget, pendingIntent);

appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}

关于java - 如何从小部件本身手动调用 `onUpdate`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40776920/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com