java - Widget 中可点击的 ImageView?

标签 java android widget

我在android中有这个小部件,它显示图像并由广播接收器定期更新。现在我想让用户能够通过单击小部件来启动配置屏幕(首选项 Activity )。就这样:

小部件提供程序类:

public class MyProvider extends AppWidgetProvider {
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        ComponentName thisWidget = new ComponentName(context.getApplicationContext(), MyProvider.class);
        int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

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

        for (int widgetId : appWidgetIds) {
            // setting onClickListener - at least i TRY to
            Intent onClickIntent = new Intent(context, Preferences.class);

            PendingIntent onClickPendingIntent = PendingIntent.getBroadcast(context, 0, onClickIntent, 0);
            rViews.setOnClickPendingIntent(R.id.graph, onClickPendingIntent);

            appWidgetManager.updateAppWidget(widgetId, rViews);
        }
    }
}

小部件的更新从这里触发:

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context.getApplicationContext());

        int[] allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
        ComponentName myWidget = new ComponentName(context.getApplicationContext(), MyProvider.class);
        int[] allMyWidgetIds = appWidgetManager.getAppWidgetIds(myWidget);  

        for (int widgetId : allMyWidgetIds)
        {
            RemoteViews rViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
            // update the widgets content, i.e. picture
            appWidgetManager.updateAppWidget(widgetId, rViews);
        }

        // schedule next update
        Calendar c = Calendar.getInstance();
        c.add(Calendar.SECOND, Config.UPDATE_RATE);
        Date d = new Date(c.getTimeInMillis());

        Intent timerIntent = new Intent(context.getApplicationContext(), TimeIntervalReceiver.class);

        timerIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);
        PendingIntent timerPendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 0, timerIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager aManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        aManager.set(AlarmManager.RTC, d.getTime(), timerPendingIntent);
    }
}

顺便提一下:Preference.java-Activity已在Manifest中注册并且可以正确启动(我通过将其设置为启动 Activity 来验证这一点)。 无论如何,onclick 功能根本不起作用:( 我还尝试将代码移动到更新小部件的“MyReceiver”类:什么都没有:(

我已经看过: * Android: Clickable imageview widget * http://www.vogella.de/articles/AndroidWidgets/article.html

但是,这根本没有帮助:(

这里有人可以告诉我我的问题出在哪里吗?

最佳答案

尝试更改此行:

PendingIntent onClickPendingIntent = PendingIntent.getBroadcast(context, 0, onClickIntent, 0);

PendingIntent onClickPendingIntent = PendingIntent.getActivity(context, 0, onClickIntent, 0);

关于java - Widget 中可点击的 ImageView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9414293/

相关文章:

java - 带有 header 参数的Get方法无法正常工作android

java - 是否有用于检查数字是否被 2 或 3 整除的位技巧?

android - 如何从android中的服务器检索以下json数据?

java - SwipeRefreshLayout 不遵守约束

android - 复选框首选项和检查是否启用或禁用

android - android 小部件中的 TextView 不更新

java - 如果断言失败,使 java 程序退出

java - 使用非静态方法而不将其引用到对象?

ios - 从小部件(今日扩展)打开主机应用程序时未调用 AppDelegate 函数

php - Yii - 在 GridView 单元格内渲染小部件