Android PedingIntent和setOnClickFillInIntent不启动Activity

时间:2014-07-24 10:55:59

标签: android android-appwidget onupdate android-remoteview

在我的AppsSerive中,我使用以下命令加载已安装的软件包:

mApps = mContext.getPackageManager().queryIntentActivities(mainIntent, 0);

然后我会显示应用程序和标签的图标。我想在点击图标或标签后开始活动。

我在onUpdate中的WidgetProvider中设置了pendingIntentTemplate:

 Intent appsIntent = new Intent(context, AppsService.class);
   String packageName = appsIntent.getStringExtra(APP_ID);
   appsIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
   PendingIntent appsPendingIntent = PendingIntent.getActivity(context, 0, appsIntent, PendingIntent.FLAG_UPDATE_CURRENT);
   views.setPendingIntentTemplate(R.id.GridViewApps, appsPendingIntent); 

在AppsService中我宣布了setOnClickFillInIntent:

 Intent fillInIntent = new Intent();
    fillInIntent.setPackage(packageName);
    Bundle extras = new Bundle();
    fillInIntent.putExtras(extras);
    fillInIntent.addCategory(Intent.CATEGORY_DEFAULT);
    rv.setOnClickFillInIntent(R.id.app_thumb, fillInIntent);
    rv.setOnClickFillInIntent(R.id.app_name, fillInIntent);

但是当我点击图标或标签时,它没有做任何事情。

LogCat会在任何点击时显示以下内容:

07-24 11:51:06.153: E/DatabaseUtils(16583): Writing exception to parcel
07-24 11:51:06.153: E/DatabaseUtils(16583): java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
07-24 11:51:06.153: E/DatabaseUtils(16583):     at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:14643)
07-24 11:51:06.153: E/DatabaseUtils(16583):     at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2469)
07-24 11:51:06.153: E/DatabaseUtils(16583):     at com.android.providers.settings.SettingsProvider.call(SettingsProvider.java:688)
07-24 11:51:06.153: E/DatabaseUtils(16583):     at android.content.ContentProvider$Transport.call(ContentProvider.java:325)
07-24 11:51:06.153: E/DatabaseUtils(16583):     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:275)
07-24 11:51:06.153: E/DatabaseUtils(16583):     at android.os.Binder.execTransact(Binder.java:404)
07-24 11:51:06.153: E/DatabaseUtils(16583):     at dalvik.system.NativeStart.run(Native Method)


07-24 11:51:06.384: W/ActivityManager(16583): destPackageName = null

2 个答案:

答案 0 :(得分:0)

@sporty

1)对于遇到此问题的其他任何人,对我而言,只是在AndroidManifest.xml文件中出现了名称错误的活动。

我不需要添加任何权限,一旦活动名称被更正(在我的声明中说明了错误的包名),它运行正常。

@)当我在我的Manifest中将minSdkVersion从8更改为11时,我收到此错误。我把它改回了8或9,没有更多的错误。

尝试更改清单中的minSdkVersion。我能够在版本10,11和12中重复崩溃和错误结果(我的应用程序崩溃并在LogCat中显示“需要android.permission.INTERACT_ACROSS_USERS_FULL”)

如果您需要进一步查询,请告诉我

由于

答案 1 :(得分:0)

我已经确定了问题的三个潜在来源:

  1. 设置点击监听器后,您需要使用AppWidgetManager更新updateAppWidget(...);

  2. 我不确定您是否正确使用setOnClickFillInIntent()。你是故意使用它吗?你知道它的作用吗?如果您的小部件包含像ListView这样的集合,那么您才真正需要它。如果它没有使用setOnClickPendingIntent()

  3. 错误可能在这里:fillInIntent.setPackage(packageName);?我认为packageName可能是null