Is there any way in Android to force open a link to open in Chrome? Is there any way in Android to force open a link to open in Chrome? google-chrome google-chrome

Is there any way in Android to force open a link to open in Chrome?


A more elegant way to achieve this is to use the Intent.ACTION_VIEW intent as normal, but add the package com.android.chrome to the intent. This works regardless of whether Chrome is the default browser and ensures exactly the same behavior as if the user had selected Chrome from the chooser list.

String urlString = "http://mysuperwebsite";Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(urlString));intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setPackage("com.android.chrome");try {    context.startActivity(intent);} catch (ActivityNotFoundException ex) {    // Chrome browser presumably not installed so allow user to choose instead    intent.setPackage(null);    context.startActivity(intent);}

Update

For Kindle Devices:

Just in case if you want to open Amazon Default Browser in case chrome app is not installed in Amazon Kindle

String urlString = "http://mysuperwebsite";Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(urlString));intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setPackage("com.android.chrome");try {    context.startActivity(intent);} catch (ActivityNotFoundException ex) {    // Chrome browser presumably not installed and open Kindle Browser    intent.setPackage("com.amazon.cloud9");    context.startActivity(intent);}


There are two solutions.

By package

    String url = "http://www.example.com";    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    i.setPackage("com.android.chrome");    try {        startActivity(i);    } catch (ActivityNotFoundException e) {        // Chrome is probably not installed        // Try with the default browser        i.setPackage(null);        startActivity(i);    }

By scheme

    String url = "http://www.example.com";    try {        Uri uri = Uri.parse("googlechrome://navigate?url=" + url);        Intent i = new Intent(Intent.ACTION_VIEW, uri);        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        startActivity(i);    } catch (ActivityNotFoundException e) {        // Chrome is probably not installed    }

WARNING! The following technique does not work on most recent versions of Android. It is here for reference, because this solution has been around for a while:

    String url = "http://www.example.com";    try {        Intent i = new Intent("android.intent.action.MAIN");        i.setComponent(ComponentName.unflattenFromString("com.android.chrome/com.android.chrome.Main"));        i.addCategory("android.intent.category.LAUNCHER");        i.setData(Uri.parse(url));        startActivity(i);    }    catch(ActivityNotFoundException e) {        // Chrome is probably not installed    }


All the proposed solutions doesn't work for me anymore. Thanks to @pixelbandito, he pointed me to the right direction. I've found the next constant in the chrome sources

public static final String GOOGLECHROME_NAVIGATE_PREFIX = "googlechrome://navigate?url=";

And the next usage:

 Intent intent = new Intent("android.intent.action.VIEW", Uri.parse("googlechrome://navigate?url=chrome-native://newtab/"));

So the solution is (note the url should not be encoded)

void openUrlInChrome(String url) {    try {        try {            Uri uri = Uri.parse("googlechrome://navigate?url="+ url);            Intent i = new Intent(Intent.ACTION_VIEW, uri);            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            startActivity(i);        } catch (ActivityNotFoundException e) {            Uri uri = Uri.parse(url);            // Chrome is probably not installed            // OR not selected as default browser OR if no Browser is selected as default browser            Intent i = new Intent(Intent.ACTION_VIEW, uri);            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            startActivity(i);        }    } catch (Exception ex) {        Timber.e(ex, null);    }}