私は現在、多くの jQuery アニメーションで開発された Web アプリをテストしていますが、組み込みの Web ブラウザーのパフォーマンスが非常に悪いことに気付きました。Chrome でテストしている間、Web アプリのパフォーマンスは信じられないほど高速です。iOS の場合と同様に、Chrome for Android でリンクを強制的に開くスクリプトがあったかどうか疑問に思っています。
10 に答える
これを実現するためのより洗練された方法は、Intent.ACTION_VIEW
インテントを通常どおり使用することですが、パッケージcom.android.chrome
をインテントに追加することです。これは、Chrome が既定のブラウザーであるかどうかに関係なく機能し、ユーザーが選択リストから Chrome を選択した場合とまったく同じ動作を保証します。
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);
}
アップデート
Kindle デバイスの場合:
Amazon KindleにChromeアプリがインストールされていない場合に備えて、Amazonのデフォルトブラウザを開きたい場合に備えて
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);
}
解決策は 2 つあります。
パッケージ別
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);
}
スキーム別
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
}
警告!次の手法は、最新バージョンの Androidでは機能しません。このソリューションはしばらく前から存在しているため、参照用にここにあります。
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
}
提案されたすべてのソリューションは、もはや私にとってはうまくいきません。@pixelbandito のおかげで、彼は私を正しい方向に向けてくれました。クロムソースで次の定数を見つけました
public static final String GOOGLECHROME_NAVIGATE_PREFIX = "googlechrome://navigate?url=";
そして次の使用法:
Intent intent = new Intent("android.intent.action.VIEW", Uri.parse("googlechrome://navigate?url=chrome-native://newtab/"));
したがって、解決策は次のとおりです(URLをエンコードしないでください)
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);
}
}
これはFirefoxとOperaで動作します
document.location = 'googlechrome://navigate?url=www.example.com/';
上記のさまざまな回答は適切ですが、完全なものはありません。これはすべて私に最も適していました。
Chrome Web ブラウザーを開こうとすると、例外が発生した場合 (Chrome がデフォルトではないか、インストールされていない)、ユーザーからブラウザーを選択するように求められます。
String uriString = "your uri string";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uriString));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setPackage("com.android.chrome");
try {
Log.d(TAG, "onClick: inTryBrowser");
startActivity(intent);
} catch (ActivityNotFoundException ex) {
Log.e(TAG, "onClick: in inCatchBrowser", ex );
intent.setPackage(null);
startActivity(Intent.createChooser(intent, "Select Browser"));
}
@philippe_bの回答に続き、Chromeがインストールされていない場合、このコードは機能しないことを追加したいと思います。動作しないケースがもう 1 つあります。それは、Chrome がデフォルトのブラウザとして選択されていない (インストールされている) 場合、またはブラウザがデフォルトとして選択されていない場合です。
このような場合は、コードの次のキャッチ部分も追加します。
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("http://mysuperwebsite"));
startActivity(i);
}
catch(ActivityNotFoundException e) {
// 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.parse("somesite.com"));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}