2015-03-12 3 views
0

Его работает должным образом на каждом уровне API, но не работает должным образом на Lolipop (API 21) код находится здесь:Как нажать кнопку, чтобы открыть браузер?

Intent internetIntent = new Intent(Intent.ACTION_VIEW, Uri 
        .parse("http://www.google.com/")); 
      internetIntent.setComponent(new ComponentName(
        "com.android.browser", 
        "com.android.browser.BrowserActivity")); 
      internetIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(internetIntent); 
+3

Что вы подразумеваете под «неправильной работой»? любое исключение –

+0

Есть ли причина, по которой вы устанавливаете конкретный компонент? – ianhanniballake

+0

, вы НЕ должны указывать жесткий код для браузера, то есть плохой стиль кодирования, чтобы пользователь мог указать, какой браузер они хотели бы использовать. Пользователь неявный намерение вызвать браузер вместо этого. – JoxTraex

ответ

0

Проверьте этот код:

   Intent intent = new Intent(); 
       intent.setAction(Intent.ACTION_VIEW); 
       intent.addCategory(Intent.CATEGORY_BROWSABLE); 
       intent.setData(Uri.parse("http://www.google.com/")); 
       startActivity(intent); 
+0

Я думаю, что он пытается открыть браузер по умолчанию: P –

0

Да, это не будет работать в Lollipop , или может не работать на каких-либо телефонах изготовленных (Sony, Samsung) телефонов, поскольку вы пытаетесь открыть заявку с именем пакета com.android.browser

internetIntent.setComponent(new ComponentName(
        "com.android.browser", 
        "com.android.browser.BrowserActivity")); 

В браузере Lollipop по умолчанию используется хром, у которого есть имя пакета что-то еще. И нет приложения с пакетом com.android.browser в Lollipop.

То же самое может случиться с любыми другими телефонами Sony/Samsung.

Что вы можете сделать, это либо вызвать для Application Chooser Dialog или find the default browser application, and open it

1) Код для применения Chooser:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://")); 
startActivity(intent); 

2) код, чтобы найти приложение по умолчанию и запустить его:

 ComponentName cn=null; 
     Intent browserIntent = new Intent("android.intent.action.VIEW", Uri.parse("http://")); 
     ResolveInfo resolveInfo = packageManager.resolveActivity(browserIntent, PackageManager.MATCH_DEFAULT_ONLY); 
     if (resolveInfo.activityInfo.packageName.equals("android")) { 
      List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(browserIntent, PackageManager.MATCH_DEFAULT_ONLY); 
      for (ResolveInfo info : resolveInfos) { 
       if (!info.activityInfo.packageName.equals("android")) { 
        cn = new ComponentName(info.activityInfo.packageName, info.activityInfo.name); 
       } 
      } 
      if(cn==null) 
      cn = new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"); 
     } else { 
      cn = new ComponentName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name); 
     } 

     if(cn!=null){ 
      Intent openIntent = new Intent(); 
      openIntent.setComponent(cn); 
      openIntent.setData(Uri.parse("http://www.google.com/")); 
      startActivity(openIntent); 
     } 
Смежные вопросы