Add my browser in the default browser selection li

2019-06-16 11:45发布

Following the suggestions from How to add my browser in the default browser selection list in android?. I have specified my Intent in the manifest file:

<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>

I have also added the permission:

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

But still my browser is not showing in the default app options for the browser category in the settings.

Do I need to do anything else for my app to show up in the default options for browser?

6条回答
唯我独甜
2楼-- · 2019-06-16 12:15

As mentioned in documentation over developer.android.com

you need to set intent filer as below

<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楼-- · 2019-06-16 12:15

Consider using CATEGORY_APP_BROWSER with your main filter:

Used with ACTION_MAIN to launch the browser application. The activity should be able to browse the 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>
查看更多
小情绪 Triste *
4楼-- · 2019-06-16 12:24

You can achieve this programatically, like this:

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);

and also it will be good, if you put a check for the app existence on phone.

Happy Coding :)

查看更多
Summer. ? 凉城
5楼-- · 2019-06-16 12:27

You can do it with Intent-Filter by making your Activity Browsable.using below code in Android manifest File.

You can do it with Launcher Activity.

<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>

And you must provide scheme as http and https for links to be open with your Application.

查看更多
小情绪 Triste *
6楼-- · 2019-06-16 12:30

Try to include the <category android:name="android.intent.category.BROWSABLE" /> in your target activity's intent-filter as developer documentation said:

If the user is viewing a web page or an e-mail and clicks on a link in the text, the Intent generated execute that link will require the BROWSABLE category, so that only activities supporting this category will be considered as possible actions.

It is required in order for the intent-filter to be accessible from a clickable link. Without it, clicking a link cannot resolve to your app.

<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>

.

Additional Tip: (If you want to force your app to be the default browser)

Android App Links on Android 6.0 (API level 23) and higher allow an app to designate itself as the default handler of a given type of link. If the user doesn't want the app to be the default handler, they can override this behavior from their device's system settings.

To enable link handling verification for your app, set android:autoVerify="true" in intent-filter tag:

<activity ...>

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

         ...

    </intent-filter>

</activity>
查看更多
Luminary・发光体
7楼-- · 2019-06-16 12:38

You need to consider various cases that may be applicable.

Please refer the intent-filters below. Also link is provided at the end.

<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>

Look at the different types of intent-filters you might need in order to cover all possible cases.

Refer to this link - complete manifest file of froyo browser.

查看更多
登录 后发表回答