-->

从Android应用程序中打开本地浏览器(Open the native browser from

2019-06-23 23:47发布

我已经安装了android手机与多个浏览器,我可能会或可能不会设置浏览器为默认值。

所以,我的问题是..

  1. 从我的应用程序,如何强制只在原生的Android浏览器中打开一个链接?
  2. 有没有一种方法可以让我知道,如果有一个浏览器设置为默认或没有?

Answer 1:

从我的应用程序,如何强制只在原生的Android浏览器中打开一个链接?

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
}


Answer 2:

你必须做以下调用本机浏览器

  intent.setComponent(new    
  componentName("com.android.browser","com.android.browser.BrowserActivity"));


Answer 3:

尝试这样的事情。

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


Answer 4:

终于找到它了。 resolveActivity工作与PackageManager例如MATCH_DEFAULT_ONLY标志..



Answer 5:

而包名是由厂商而不同,可能会出现ActivityNotFoundException。 请参考这个答案,希望这将有助于。

https://stackoverflow.com/a/14723703/1083128



文章来源: Open the native browser from an android app