【问题标题】:Permission Denial with ACTION_PICK_ACTIVITY使用 ACTION_PICK_ACTIVITY 拒绝权限
【发布时间】:2015-04-03 23:50:06
【问题描述】:

用户报告了以下强制关闭:

java.lang.SecurityException: Permission Denial: 从 ProcessRecord{43ab9d40 15868:com.barkside.music 开始 Intent { act=android.intent.action.PICK_ACTIVITY cmp=com.android.settings/.ActivityPicker (has extras) } /u0a10113} (pid=15868, uid=10113) 需要 huawei.android.permission.HW_SIGNATURE_OR_SYSTEM 在 android.os.Parcel.readException(Parcel.java:1434) 在 android.os.Parcel.readException(Parcel.java:1388) 在 android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1985) 在 android.app.Instrumentation.execStartActivity(Instrumentation.java:1419) 在 android.app.Activity.startActivityForResult(Activity.java:3449) 在 android.app.Activity.startActivityForResult(Activity.java:3388) 在 com.barkside.music.PlayInActivity.onAddApp(未知来源)

当我尝试使用 ACTION_PICK_ACTIVITY 启动Activity 时会发生这种情况。

我对此的唯一报告是针对运行 4.3 的华为 Ascend Mate 2。

因此,华为似乎已将其锁定为仅供系统应用程序使用。无论如何无需实现我自己的选择活动列出已安装的应用程序来选择?

编辑:添加代码:

Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
pickIntent.putExtra(Intent.EXTRA_TITLE, "Pick App to Play in");
pickIntent.putExtra(Intent.EXTRA_INTENT, mainIntent);
this.startActivityForResult(pickIntent, REQUEST_PICK_APPLICATION);

【问题讨论】:

  • 您有什么理由不使用Intent.createChooser()?还是你一开始就是这样得到的?您可能希望发布触发堆栈跟踪的代码。
  • 请注意,我并不是说您尝试使用ACTION_PICK_ACTIVITY 会失败;我只是 filed a bug report 关于你的崩溃。但是,我没有看到很多开发人员直接使用该操作。选择器模型似乎更常见,可能华为没有把选择器搞乱(如果他们这样做了,那将是一个更大的问题)。我只是想确定ACTION_PICK_ACTIVITY 的用例,因为这可以帮助我们帮助您找到替代方案。
  • @CommonsWare 老实说,我不知道 ACTION_CHOOSER 可以用于我的这个活动选择器功能。但你是对的,它会解决我的问题。现在有点尴尬!我应该删除问题、回答还是要回答?
  • 我建议您使用选择器做一些事情,然后写下一个显示您的旧代码和新代码的答案,以记录您的解决方法。您的问题完全有效(如果不幸的是,华为不应该这样做......),所以最好记录一下解决方法。
  • 听起来不错。感谢@CommonsWare 并感谢您提交错误报告!

标签: android


【解决方案1】:

所以我尝试了 createChooser,当然它实际上将意图发送到用户选择的应用程序。我想要的是在 onActivityResult 中将活动的类返回给我。 ACTION_CHOOSER 能以某种方式做到这一点吗?

没有。为此,特别是考虑到您对ACTION_PICK_ACTIVITY 的问题,您将不得不使用PackageManagerqueryIntentActivities() 推出自己的UI。这让人想起编写主屏幕启动器,如my Launchalot sample

【讨论】:

    猜你喜欢
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2015-08-30
    相关资源
    最近更新 更多