2012-04-26 17 views
6

複数のブラウザがインストールされたアンドロイド携帯電話があり、ブラウザをデフォルトに設定する場合と設定しない場合があります。アンドロイドアプリからネイティブブラウザを開く

だから、私の質問は...私のアプリから

  1. 、私は唯一のNATIVEアンドロイドブラウザでリンクを開く強制するにはどうすればよいですか?
  2. デフォルトに設定されているブラウザがあるかどうかを知る方法はありますか?

答えて

6

私のアプリから、どのように私はNATIVEアンドロイド ブラウザでリンクを開く強制できますか?

Intent intent = new Intent(); 
ComponentName comp = new ComponentName("com.google.android.browser","com.google.android.browser.BrowserActivity"); 
intent.setComponent(comp); 
intent.setAction("android.intent.action.VIEW"); 
intent.addCategory("android.intent.category.BROWSABLE"); 
Uri uri = Uri.parse(url); 
intent.setData(uri); 
try 
{ 
    startActivity(intent); 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 

デフォルトたりしないように設定されたブラウザがある場合、私は知ることができる方法はありますか?

PackageManager packageManager = getPackageManager(); 

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setData(Uri.parse("URL")); 

List<ResolveInfo> list = packageManager.queryIntentActivities(intent, 0); 

if (list.size() > 0) { 
    for (ResolveInfo resolveInfo : list) { 
     resolveInfo.isDefault();// will let u know if the app is set to default 
    } 

} else { 
    //No apps available 
} 
+0

素晴らしい!これは機能します。ありがとうPrabhu :) – defactodeity

+1

上記のコードは、デフォルトのブラウザを識別できませんでした。私のデバイスではOperaをデフォルトのブラウザに設定しましたが、このコードを実行すると、 'resolveInfo.isDefault'はどのブラウザでも真実ではありません!助けてください。 – defactodeity

1

このようなものを試してください。

try { 
     Intent i = new Intent(); 
     ComponentName comp = new ComponentName("com.google.android.browser","com.google.android.browser.BrowserActivity"); 
     i.setComponent(comp); 
     i.setAction("android.intent.action.VIEW"); 
     i.addCategory("android.intent.category.BROWSABLE"); 
     ContentURI uri = new ContentURI(url); 
     i.setData(uri); 
     startActivityForResult(i, 2); 
     } catch (URISyntaxException e) { 
         e.printStackTrace(); 
     } 

PackageManagerをご利用いただけます。

PackageManager

PackageManager packageManager = getPackageManager(); 

のインスタンスを取得し、特定のアクション、データ及びIntentのカテゴリのためにそれを照会します。

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setData(Uri.parse("URL")); 

List<ResolveInfo> list = packageManager.queryIntentActivities(intent, 0); 

    for (ResolveInfo resolveInfo : list) { 

     if(resolveInfo.isDefault()) 
     { 
     //default browser 
     } 
    } 
+0

たくさんN-JOY @おかげ 次のコードでは、最初の質問に答えました。 'インテントii =新しいインテント(); コンポーネント名comp =新しいComponentName( "com.android.browser"、 "com.android.browser.BrowserActivity"); ii.setComponent(comp); ii.setAction( "android.intent.action.VIEW"); ii.addCategory( "android.intent.category.BROWSABLE"); ii.setData(Uri.parse( "http://www.google.com")); startActivity(ii); ' 質問の2番目の部分について**携帯電話にデフォルトのブラウザが設定されているかどうかを知る方法はありますか?** – defactodeity

+0

私はあなたの2番目の質問を更新しました。 –

+0

ブラウザをデフォルトに設定しましたが、 'resolveInfo.isDefault'は動作していないようです。 – defactodeity

1

最後にわかりました。 resolveActivityがPackageManagerインスタンス上MATCH_DEFAULT_ONLYフラグで動作します。..

4

あなたは、パッケージ名はメーカーによって異なるが、それはActivityNotFoundExceptionを発生する可能性がある

intent.setComponent(new  
    componentName("com.android.browser","com.android.browser.BrowserActivity")); 
関連する問題