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

Posted

技术标签:

【中文标题】Android 每次都会询问我要使用哪个应用程序,即使在我将我的应用程序设置为默认应用程序之后也是如此。为啥?【英文标题】:Android asks me which app to use every time, even after I've set my app as the default. Why?Android 每次都会询问我要使用哪个应用程序,即使在我将我的应用程序设置为默认应用程序之后也是如此。为什么? 【发布时间】:2021-04-27 21:50:51 【问题描述】:

我的应用有一个用于打开 YouTube 链接的活动,其中包含我从 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>

【问题讨论】:

【参考方案1】:

我没有做任何测试来最终回答这个问题,但我认为就我而言,这是因为我的应用没有“主要活动”。我添加了一个包含 LAUNCHER 和 DEFAULT 类别的适当活动,现在该应用程序的行为符合我的预期。

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

【讨论】:

以上是关于Android 每次都会询问我要使用哪个应用程序,即使在我将我的应用程序设置为默认应用程序之后也是如此。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Google SignIn 每次都会询问权限

GCM每次都发送不同的RegistrationId

为啥每次尝试运行 Python 程序时 Eclipse 都会要求我“构建”?

为啥,每次打开EXcel都会这个窗口,所以导致每次都要开两次才行!

Google+ 登录无法正常工作

每次启动应用程序时,Android 数据库都会重新创建