【问题标题】:Android PedingIntent and setOnClickFillInIntent don't start ActivityAndroid PedingIntent 和 setOnClickFillInIntent 不启动 Activity
【发布时间】:2014-07-24 10:55:59
【问题描述】:

在我的 AppsServive 中,我加载已安装的包:

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

【问题讨论】:

    标签: android android-appwidget onupdate android-remoteview


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 嗨 Xaver,谢谢,我在点击后更新了 Listener:appWidgetManager.updateAppWidget(appWidgetId, views); 是的,这些应用都列在了 gridView 中。
    • 谢谢 Xaver,这就是问题所在:String packageName = mApps.get(position).activityInfo.packageName;
    • 很高兴能帮上忙!
    【解决方案2】:

    @运动

    1) 对于遇到此问题的任何其他人,对我来说,这只是 AndroidManifest.xml 文件中的活动名称错误。

    我不需要添加任何权限,一旦活动名称被更正(在我的中它指出错误的包名称),它运行良好。

    @) 当我将 Manifest 中的 minSdkVersion 从 8 更改为 11 时出现此错误。我把它改回 8 或 9 并且没有更多错误。

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

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

    谢谢

    【讨论】:

    • 我的 minSDKVersion 是 17。
    • 好的。我给你的解决方案类似于我遇到的问题。它是否根据 Xaver 有效。接受我的回答。
    猜你喜欢
    • 2013-06-15
    • 1970-01-01
    • 2018-01-13
    • 2016-07-05
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多