即使安装了 Chrome 和 YouTube,ACTION_VIEW YouTube 网址的 Android Intent 也为空

问题描述 投票:0回答:1

我的 Android 应用程序中有一个“帮助”菜单,它将显示帮助网页或帮助视频。随着时间的推移,我们遇到了一些奇怪的问题,意图返回 null,因为他们没有浏览器或类似的东西(至少这是我之前基于 Firebase 异常报告的假设)。因此,我们使代码变得更加复杂,以检查以几种不同方式组合在一起的 YouTube 视频网址的任何应用程序。如果系统表示没有应用程序可以处理它,则尝试以不同的方式构建 Intent。

这终于发生在我身上,所以这很好!但是,我的手机上安装了 Chrome 和 YouTube 应用程序,但resolveActivity() 返回为 null。

在下面的代码中,

youtubeuri = "https://www.youtube.com/watch?v=JHb9wYcmQcg"
videourlstring = "https://www.youtube.com/watch?v=JHb9wYcmQcg"
(在这种特殊情况下,网址最终是相同的)。

但即使我安装了 Chrome 和 YouTube,它也找不到启动 YouTube 网址的基本

ACTION_VIEW
意图的活动。

最近版本的 AndroidOS 是否发生了某些变化,如果没有特殊权限或其他什么东西,我的操作方式将不再起作用?我做错了什么?

private void startVideo(HelpTutorial tutorial) {

    String videoid = tutorial.getVideoID();
    Uri youtubeuri = Uri.parse("https://www.youtube.com/watch?v=" + videoid);
    Intent intent = new Intent(Intent.ACTION_VIEW, youtubeuri);

    List<ResolveInfo> list = this.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    if (list.size() == 0) {
        String videourlstring = tutorial.getVideoURLString();
        intent = new Intent(Intent.ACTION_VIEW, Uri.parse(videourlstring));
    }
    if (intent.resolveActivity(getPackageManager()) != null) {
        this.startActivity(intent);

    } else {
        AlertDialogFragment alert = new AlertDialogFragment();
        alert.setTitle(getString(R.string.no_browser_installed_title));
        alert.setMessage(getString(R.string.no_browser_installed_message));
        alert.show(getSupportFragmentManager(), "No Browser Error");
    }
    
}

编辑:

如果我只是

startActivity()
,即使
resolveActivity()
返回 null,YouTube 应用程序实际上也会打开。因此,该应用程序已安装并可以运行...但由于某种原因,我的应用程序不允许看到这一点。

android android-intent
1个回答
0
投票

Android 11 引入了“包可见性”,以保护隐私/安全。如果您使用此类

PackageManager
调用,则需要 将内容添加到清单中以声明您要查找的内容

根据您的情况,您可能可以使用:

    <queries>
        <intent>
            <action android:name="android.intent.action.VIEW" />
        </intent>
    </queries>
© www.soinside.com 2019 - 2024. All rights reserved.