我的Android应用程序中有一个帮助菜单,可以显示帮助网页或帮助视频.随着时间的推移,我们遇到了一些奇怪的问题,意图返回为空,因为他们没有浏览器或类似的东西(至少这是我之前基于Firebase异常报告的假设).因此,我们让代码变得更复杂,以便通过几种不同的方式来判断YouTube视频URL的任何应用程序.如果系统说没有应用程序可以处理它,请try 以不同的方式构建意图.

它终于发生在我身上了,所以这很好!然而,我的手机上安装了Chrome和YouTube应用程序,但ResolveActivity()返回的结果为空.

在下面的代码中,youtubeuri = "https://www.youtube.com/watch?v=JHb9wYcmQcg"videourlstring = "https://www.youtube.com/watch?v=JHb9wYcmQcg"(在这个特殊情况下,URL最终是相同的).

但是,即使我同时安装了Chrome和YouTube,它也找不到一个活动来启动对YouTube URL的基本ACTION_VIEW的意图.

最新版本的安卓操作系统有什么变化吗?如果没有特殊许可,我的操作方式就不再起作用了吗?我做错了什么?

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()返回空值,那么YouTube应用程序实际上是打开的.所以这个应用程序已经安装好了,并且可以正常工作了.但出于某种原因,我的应用程序不允许看到这一点.

推荐答案

Android 11引入了"包可见性",以保护隐私/安全.如果你使用这种PackageManager个电话,你需要add stuff to your manifest to declare what you're looking for个.

在您的情况下,您可能能够使用:

    <queries>
        <intent>
            <action android:name="android.intent.action.VIEW" />
        </intent>
    </queries>

Android相关问答推荐

RippleTheme在作曲material 1.7.0中被废弃

如何制作带有图标和文本的Fab

我到底应该如何分享我的应用程序中的图片?

Android:微调:在代码中设置ArrayAdapter不希望调用On ItemSelected,仅当用户单击微调时调用

MAP函数返回单位列表而不是字符列表

默认调度程序是否在协程中使用共享线程池?

Android App Google AdMob";广告加载失败:3;带有测试ID,&q;广告加载失败:1 for My Gahad

如何使用进度条和返回函数进行API调用,同时在Android上使用Kotlin保持高效?

Kotlin为多个控件设置一个侦听器

jetpackcompose-如何对解析后的复杂对象进行状态提升?

LaunchedEffect没有延迟时应用程序崩溃

使用 List 和 LazyColumn 重新组合所有项目

如何将一个 Composable 作为其参数传递给另一个 Composable 并在 Jetpack Compose 中显示/运行它

如何在jetpack compose中通过lamda返回columnScope/RowScope

前台服务通知需要几秒钟才能显示

Android Studio xml 预览问题无法初始化编辑器

如何使用底页,启用和展开父交互

如何在 Android 上移动 EditText 上的图标?

如何使用 Kotlin Coroutines 正确地拥有待处理的操作队列?

如何使用 Jetpack Compose 在应用程序中实现本地化