cin*_*cin 6 java android widget android-widget
我在我的HomeScreen上有一个Widget,我在其上添加了一个Button按钮.我将小部件ID从Widget传递给服务,但是当我在服务中读取WidgetId时,它总是3.
小工具:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
    for (int appWidgetId : appWidgetIds) {
        RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget);
        Intent intent = new Intent(context, WidgetService.class);
        // prints the correct appWidgetId
        System.out.println(appWidgetId);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
        remoteView.setOnClickPendingIntent(R.id.Button01, pendingIntent);
        appWidgetManager.updateAppWidget(appWidgetId, remoteView);
    }
    super.onUpdate(context, appWidgetManager, appWidgetIds);
}
服务看起来像这样:
public int onStartCommand(Intent intent, int flags, int startId){
    if (intent != null && intent.getExtras() != null) {
        int widgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
        // 3 is always printend
        System.out.println(widgetId);
        // More stuff here
    }
    return super.onStartCommand(intent, flags, startId);
}
那么我做错了什么?
AFAIK,如果没有一些技巧,你想要做的事情是不会成功的。
PendingIntent每个只能有一个未完成的Intent。因此,如果您创建两个Intents等效的(匹配非额外数据),并且您尝试创建两个,那么最终PendingIntents您实际上会得到一个。PendingIntent使用哪个Intent取决于您提供给getService()(或getActivity()或getBroadcast()) 的标志。就您而言,Intent将始终使用第一个。
如果您只有一项未完成的任务PendingIntent,但只想更新其附加功能,FLAG_UPDATE_CURRENT那么可以。但是,您想要 N Outstanding PendingIntents。
据我所知,在您的情况下实现该功能的唯一方法是将唯一的操作字符串放入Intent. 由于您指定了组件 ( WidgetService.class),因此操作字符串将不会用于路由。然而,给你多个PendingIntent对象就足够了。
| 归档时间: | 
 | 
| 查看次数: | 2103 次 | 
| 最近记录: |