【发布时间】: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