问题描述
我的应用有一个用于打开 YouTube 链接的 Activity,其中包含我从 NewPipe 复制的意图过滤器。它工作正常:当我单击 YouTube 链接时,Android 询问我要使用哪个应用程序,并且我的应用程序出现在列表中。 问题是,它每次都会问我这个问题,即使在我进入设置并选择“在此应用中打开”之后也是如此。
NewPipe 按预期工作:选择“在此应用中打开”后,它每次都会打开 YouTube 链接,无需询问。
这是我的活动的 AndroidManifest 部分,复制自 here:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
<!-- Youtube filter,copied from NewPipe -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.broWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="youtube.com" />
<data android:host="m.youtube.com" />
<data android:host="www.youtube.com" />
<data android:host="music.youtube.com" />
<!-- video prefix -->
<data android:pathPrefix="/v/" />
<data android:pathPrefix="/embed/" />
<data android:pathPrefix="/watch" />
<data android:pathPrefix="/attribution_link" />
<!-- channel prefix -->
<data android:pathPrefix="/channel/" />
<data android:pathPrefix="/user/" />
<data android:pathPrefix="/c/" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.broWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="youtu.be" />
<data android:pathPrefix="/" />
</intent-filter>
</activity>
解决方法
我没有做过任何测试来最终回答这个问题,但我认为这是因为我的应用程序没有“主要活动”。我添加了一个具有 LAUNCHER 和 DEFAULT 类别的适当活动,现在该应用的行为符合我的预期。
这可能是一项安全功能,以防止“隐藏”应用劫持某人的查看意图。