Android 每次都会询问我使用哪个应用程序,即使在我将我的应用程序设置为默认应用程序之后也是如此为什么?

问题描述

我的应用有一个用于打开 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 类别的适当活动,现在该应用的行为符合我的预期。

这可能是一项安全功能,以防止“隐藏”应用劫持某人的查看意图。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...