安卓11/API 30 - 打开YouTube链接

3

我目前遇到了一个问题,就是无法在浏览器或YouTube应用中打开YouTube链接。我知道Android 11中有一个新的包可见性(Package visibility)功能,并采用了如下方式实现。

MyClass.java$myMethod

String ytLink = "https://www.youtube.com/watch?v=Hp_Eg8NMfT0"
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(ytLink)); 
if (intent.resolveActivity(context.getPackageManager()) != null) {  
  context.startActivity(intent); 
}

AndroidManifest.xml

<manifest>
  <queries>
    <intent>
      <action android:name="android.intent.action.VIEW" />
      <data android:scheme="https" />
    </intent>
  </queries> 
</manifest>

然而,intent.resolveActivity会返回null... 我试过的所有其他链接都会返回ComponentName,因此可以启动Intent...
你有任何线索吗?
预先感谢 ;)
3个回答

9

另一个选项是在清单中将主机添加到查询列表中:

<queries>    
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data  android:scheme="https" android:host="youtube.com" />
    </intent>
</queries>

看起来只使用scheme的简单方法会失败,因为Youtube应用程序不仅会过滤请求的scheme,而且(出于明显的原因)还会过滤特定的主机。

顺便说一下:我测试时,"youtube.com"和"youtu.be"在两种链接上都可以正常工作。我仍然在我的应用程序中加入了这两个以确保安全。


3
你还需要将actiondata添加到清单文件(Activity的)中。
例如:
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />

    <data android:scheme="https" />
</intent-filter>

您可以在此处查阅文档:这里

2
抱歉,如果我说错了,请您原谅。Intent 过滤器用于声明我的应用程序中的某个活动、服务或接收器可以处理和打开什么。 我的目标是从我的应用程序中打开 YouTube URL 到浏览器应用程序或已安装的 YouTube 应用程序,而不是在我的应用程序中打开它 ;) 对于任何 URL(报纸、dailymotion 等),都可以启动浏览器应用程序,但对于 YouTube,找不到任何应用程序或活动来处理它,尽管我们可以通过浏览器浏览到 youtube.com...也许这是 Google 新加的限制? - Doc_1faux
抱歉,您需要使用类别“default”而不是可浏览的(browsable)来打开YouTube应用程序,只需将其替换为<category android:name =“android.intent.category.DEFAULT”/>。我和您一样,在Android 11上启动电子邮件意图时遇到了同样的问题,我阅读了文档并遵循了它,它也可以正常工作,但新文件没有任何有用的信息解释这一点。也许他们只是更新了新文件而没有提供有用的信息。 - Thành Thỏ
最终,我给Intent添加了一个CATEGORY_BROWSABLE类别,现在它可以正确地打开YouTube URL的浏览器 :) 你关于category的讲解和晚安祝福让我重新思考并查看了文档 - Doc_1faux

1
解决方案是在Intent中添加一个category CATEGORY_BROWSABLE,以允许浏览器成为处理YouTube URL的应用程序之一。 您还可以尝试使用标志FLAG_ACTIVITY_REQUIRE_NON_BROWSERFLAG_ACTIVITY_REQUIRE_DEFAULT,如文档所述,以在YouTube应用程序中打开它,但我的主要问题是找不到任何活动,因此在浏览器中打开是一个选项 ;)

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