将我的浏览器添加到android的默认浏览器选择列表中?

时间:2018-11-22 08:20:07

标签: java android android-intent kotlin default

遵循How to add my browser in the default browser selection list in android?的建议。我在Intent文件中指定了manifest

<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http"/> 
<data android:scheme="https"/> 
</intent-filter>

我还添加了权限:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

但是,我的浏览器仍未显示在设置中浏览器类别的默认应用程序选项中。

我是否需要做其他事情才能使我的应用显示在浏览器的默认选项中?

6 个答案:

答案 0 :(得分:11)

尝试将<category android:name="android.intent.category.BROWSABLE" />包括在目标活动的intent-filter中,如developer documentation所说:

  

如果用户正在查看网页或电子邮件,然后单击文本中的链接,则生成的Intent执行该链接将需要BROWSABLE类别,因此仅支持该类别的活动为被认为是可能的行动。

要通过可点击的链接访问intent-filter,这是必需的。没有它,单击链接将无法解析到您的应用。

<activity ...>

    <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" />
    </intent-filter>

</activity>

其他提示:(如果您想强制使应用成为默认浏览器)

Android 6.0(API级别23)及更高版本上的

Android App Links允许应用程序将自身指定为给定类型的链接的默认处理程序。如果用户不希望该应用成为默认处理程序,则可以从其设备的系统设置中覆盖此行为。

要为您的应用启用链接处理验证,请在android:autoVerify="true"标签中设置intent-filter

<activity ...>

    <intent-filter android:autoVerify="true">

         ...

    </intent-filter>

</activity>

答案 1 :(得分:0)

使用Android清单文件中的以下代码,使Intent-Filter可浏览,即可使用Activity来实现此功能。

您可以通过Launcher活动来做到这一点。

<activity android:name="BrowsableActivity">
    <intent_filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent_filter>
</activity>

并且您必须提供scheme作为httphttps,以便使用您的应用程序打开链接。

答案 2 :(得分:0)

developer.android.com上的文档中所述

您需要按以下方式设置意图文件器

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <!-- Include the host attribute if you want your app to respond
             only to URLs with your app's domain. -->
        <data android:scheme="http" android:host="www.example.com" />
        <category android:name="android.intent.category.DEFAULT" />
        <!-- The BROWSABLE category is required to get links from web pages. -->
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
</activity>

答案 3 :(得分:0)

您需要考虑各种可能适用的情况。

请参考下面的意图过滤器。末尾还提供了链接。

<activity android:name="BrowserActivity"
                  android:label="@string/application_name"
                  android:launchMode="singleTask"
                  android:alwaysRetainTaskState="true"
                  android:configChanges="orientation|keyboardHidden"
                  android:theme="@style/BrowserTheme"
                  android:windowSoftInputMode="adjustResize" >
            <intent-filter>
                <action android:name="android.speech.action.VOICE_SEARCH_RESULTS" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <!-- For these schemes were not particular MIME type has been
                 supplied, we are a good candidate. -->
            <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:scheme="about" />
                <data android:scheme="javascript" />
            </intent-filter>
            <!--  For these schemes where any of these particular MIME types
                  have been supplied, we are a good candidate. -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="http" />
                <data android:scheme="https" />
                <data android:scheme="inline" />
                <data android:mimeType="text/html"/>
                <data android:mimeType="text/plain"/>
                <data android:mimeType="application/xhtml+xml"/>
                <data android:mimeType="application/vnd.wap.xhtml+xml"/>
            </intent-filter>
            <!-- We are also the main entry point of the browser. -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>
            <!-- The maps app is a much better experience, so it's not
                 worth having this at all... especially for a demo!
            <intent-filter android:label="Map In Browser">
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.item/postal-address" />
            </intent-filter>
            -->
            <intent-filter>
                <action android:name="android.intent.action.WEB_SEARCH" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="" />
                <data android:scheme="http" />
                <data android:scheme="https" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_SEARCH" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <meta-data android:name="android.app.searchable"
                    android:resource="@xml/searchable" />
        </activity>

查看可能需要的不同类型的意图过滤器,以涵盖所有可能的情况。

请参阅此link-froyo浏览器的完整清单文件。

答案 4 :(得分:0)

考虑将CATEGORY_APP_BROWSER与主过滤器一起使用:

  

ACTION_MAIN一起使用以启动浏览器应用程序。该活动应该能够浏览Internet。

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    <category android:name="android.intent.category.APP_BROWSER" />
</intent-filter>

答案 5 :(得分:0)

您可以通过编程方式实现这一目标,例如:

Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.setType("text/plain");
share.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
share.setPackage("your.app.package.name");
startActivity(share);

如果在手机上检查该应用程序的存在,那也很好。

快乐编码:)