android - 如何知道点击的小部件 ID?

标签 android android-intent android-widget

我已经实现了一个带有 ImageButtonTextViewwidgetImageButton 在被点击时启动一个 activity。此 activity 使用用户在 Activity EditText 上写入的内容更新小部件文本。现在的问题是我只知道如何获取这样的 ID:

for (int widgetId : allWidgetIds) {
        // Create some random data
        int number = (new Random().nextInt(100));

        RemoteViews remoteViews = new RemoteViews(getApplicationContext()
                .getPackageName(), R.layout.widget_layout);
        Log.w("WidgetExample", String.valueOf(number));

        //Here I should set text from edit text, but I'm using a random for testing.

        remoteViews.setTextViewText(R.id.textView1,
                "Random: " + String.valueOf(number));

        appWidgetManager.updateAppWidget(widgetId, remoteViews);
    }

这段代码显然会改变所有 id 的数据,因为它在 for 中。无论如何,我是否可以根据我的 Intent 通过点击的 widgetId,以便我可以消除 for?这是我的 widgetProvider:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {

    // Get all ids
    ComponentName thisWidget = new ComponentName(context, Widget.class);
    allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
    for (int widgetId : allWidgetIds) {

        Intent i = new Intent(context, WidgetSetup.class);
        i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);
        i.setFlags(i.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);

        // Create some random data
        int number = (new Random().nextInt(100));

        RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                R.layout.widget_layout);
        // Set the text
        remoteViews.setTextViewText(R.id.textView1, String.valueOf(number));

        Intent active = new Intent(context, Widget.class);
        active.setAction(ACTION_WIDGET_REFRESH);
        PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
        remoteViews.setOnClickPendingIntent(R.id.imageButton1, actionPendingIntent);

        active = new Intent(context, Widget.class);
        active.setAction(ACTION_WIDGET_SETTINGS);
        actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
        remoteViews.setOnClickPendingIntent(R.id.imageButton2, actionPendingIntent);

        appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
    }
}

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(ACTION_WIDGET_REFRESH)) {
        //Log.i("onReceive", ACTION_WIDGET_REFRESH);

        Intent i = new Intent(context, MainActivity.class);
        i.setFlags(i.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);

    } else if (intent.getAction().equals(ACTION_WIDGET_SETTINGS)) {
        //Log.i("onReceive", AppWidgetManager.EXTRA_APPWIDGET_ID);



        Intent i = new Intent(context, WidgetSetup.class);
        i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);

        //Here I tried to pass the widgetID with no luck.
        //i.putExtra(pass widget id?);

        i.setFlags(i.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);

    } else {
        super.onReceive(context, intent);
    }
}

谢谢

最佳答案

有关运行示例,请查看我的 MiniCallWidget 代码第 97 和 169 行。

关于android - 如何知道点击的小部件 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15551679/

相关文章:

c# - Mono Android 中的搜索对话框

android - Intent bundle 中的 Kotlin getParcelableArray 无法将其转换为自定义类型

android - 小部件 setOnClickPendingIntent 未启动服务

java - 如何按 "|"拆分字符串

android - 看到一次后不要显示通知

php - Android 从 PHP 传递和接收参数

java - Android - 停止来自不同类的服务

android - Android模拟器可以接收ACTION_POWER_CONNECTED Intent 吗?

android - 小部件中的图像重叠

android - 从小部件获取 SCREEN_ON 和 SCREEN_OFF Intent