現在、多くのjQueryアニメーションを使用して開発されたWebアプリをテストしていますが、組み込みのWebブラウザーのパフォーマンスが非常に低いことがわかりました。 Chromeでテストしている間、webappのパフォーマンスは信じられないほど速いです。 iOSで行われているのと同様に、AndroidでChromeでリンクを強制的に開くスクリプトの種類があるかどうか疑問に思っています。
これを実現するよりエレガントな方法は、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);
}
chromeアプリがAmazon Kindleにインストールされていない場合にAmazon Default Browserを開きたい場合に備えて
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のおかげで、彼は正しい方向を示してくれました。 chromeソースで次の定数を見つけました
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/';
@philippe_bの答えを追って、Chromeがインストールされていない場合、このコードは機能しないことを追加します。それが機能しない場合がもう1つありますChromeはデフォルトのブラウザとして選択されていません(ただしインストールされています)ORデフォルトとしてブラウザが選択されていない場合でも。
そのような場合は、コードの次のcatch部分も追加します。
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);
}
私が見つけた最も近いものは次のとおりです。URLを記述してhttp
をgooglechrome
に置き換えるとChromeが開きますが、指定したURLが開かないようです。 Samsung Galaxy S5、Android 5.0を使用しています
それは私が見つけた中で最高です-SOで見た他のすべてのソリューションには、webappではなくAndroidアプリが必要です。
Google Playには、さまざまなchromeさまざまな機能を備えたブラウザアプリがあります
すべてをチェックするのは正しいことです
fun Context.openChrome(url: String, onError: (() -> Unit)? = null) {
openBrowser("com.Android.chrome", url) {
openBrowser("com.Android.beta", url) {
openBrowser("com.Android.dev", url) {
openBrowser("com.Android.canary", url) {
onError?.invoke() ?: openBrowser(null, url)
}
}
}
}
}
fun Context.openBrowser(packageName: String?, url: String, onError: (() -> Unit)? = null) {
try {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply {
setPackage(packageName)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
})
} catch (e: ActivityNotFoundException) {
onError?.invoke()
}
}
TAG定数に関するエラーが発生した場合は、このコードをアクティビティに追加してください。
private static final String TAG = "MainActivity";
上記のさまざまな答えは良いですが、完全なものはありません。これはすべて私に最適でした:
chrome Webブラウザーを開いて、例外が発生した場合(chromeがデフォルトでないかインストールされていない)、ユーザーからブラウザーを選択するように求められます:
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"));
}