解决SecurityException:Permission Denial:starting Intent。我需要什么权限?

11

我想从应用中打开Play Store。在三星手机上可以,但是在一加手机上失败了。 我不知道阿里巴巴是从哪儿来的。这很奇怪。

异常java.lang.SecurityException:Permission Denial:starting Intent {act = android.intent.action.VIEW dat = http://play.google.com/ ... cmp = com.alibaba.intl.android.apps.poseidon /com.alibaba.android.intl.weex.activity.WeexPageActivity} from ProcessRecord {a1dd30c 15827:a2bliving.ie.a2b/u0a151}(pid = 15827,uid = 10151)未导出自uid 10156

代码:

private static final String PLAY_STORE_LINK = "http://play.google.com/store/apps/details?id=%s&hl=en";

public void openUpdateLink() {
        context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getExternalAppLink())));
    }

 public String getExternalAppLink() {
        return String.format(PLAY_STORE_LINK, context.getPackageName());
    }

已经问过了,请使用搜索功能。 - Selvin
在我的应用程序中出现了相同的问题。我无法解决这个问题。 - ashraful
4个回答

8
你需要在你的AndroidManifest.xml文件中设置android:exported="true"
<activity
    android:name="com.anurag.example.MainActivity"
    android:label="Demo" 
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" >
        </action>
    </intent-filter>
</activity>

你的意思是我应该将我的活动设置为android:exported="true"吗? - Miao Yichong
5
苗一冲不是com.alibaba.intl.android.apps.poseidon/com.alibaba.android.i‌ntl.weex.activity.We‌​exPageActivity的开发者。这个活动并没有被导出,从而引发了异常。 - CommonsWare

6
在这个设备上,该Intent正在被修改以添加一个特定的组件(com.alibaba.intl.android.apps.poseidon/com.alibaba.android.intl.weex.activity.WeexPageActivity)。我不知道这是来自系统选择器还是其他什么地方。并且,它解析到的活动并没有被导出。

所以,大多数情况下,这是设备中的一个错误。

然而,由于这个活动没有被导出,你无法启动那个特定的活动。


我需要将我的活动设置为导出吗? - Miao Yichong
@MiaoYichong: “我需要将我的活动设置为导出吗?” - 你的活动不是问题所在。问题在于 com.alibaba.intl.android.apps.poseidon/com.alibaba.android.intl.weex.activity.WeexPageActivity 的导出状态。我猜测你无法控制该活动。 - CommonsWare
@MiaoYichong:正确。 - CommonsWare
@CommonsWare 我在使用Viber时也遇到了同样的问题:java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.SEND flg=0x1 cmp=com.viber.voip/.messages.ui.forward.ForwardActivity (has clip) (has extras) } - Andrii Abramov
2
@CommonsWare 我通过设置更具体的Intent类型解决了这个问题。 - Andrii Abramov
显示剩余5条评论

4
这不是你的应用程序中的错误,而是阿里巴巴应用程序中的错误。他们声明了他们的WeexPageActivity来处理http/https/file协议,但也使其不可导出。因此,每当您的应用程序尝试启动一个带有这些协议之一的意图,并且选择了阿里巴巴应用程序或更糟糕的是将其设置为默认值,你的应用程序就会崩溃。
例如,如果您使用AdMob,每当用户点击广告时都会发生这种情况(对我来说,最近的罪魁祸首应用程序是mxtech.videoplayer.ActivityWebBrowser)。
老实说,我不知道为什么Android不忽略这些活动而不是崩溃,或者其他开发人员为什么会犯这样的错误,但这不是你的错。

1
我也因为mxtech.videoplayer.ActivityWebBrowser而遇到了这个崩溃问题。 - MrinmoyMk

2

这是一个好问题。其他应用程序试图处理我的意图(但他们无法处理),导致我的应用程序崩溃。感谢安卓。

无论如何,要解决这个问题,您需要添加

i.addCategory(Intent.CATEGORY_BROWSABLE)

根据您的意图,如果您要打开一个URL,则需要指定处理您意图的应用程序。否则,您需要指定您想要处理您意图的应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接