9

Я хочу специально запустить браузер Android по умолчанию для заданного URL. Я использую этот код:Запуск приложения браузера с пользовательским классом - не удается найти активность

Intent i = new Intent(); 
i.setAction("android.intent.action.VIEW"); 
i.addCategory("android.intent.category.BROWSABLE"); 
i.setClassName("com.google.android.browser", "com.android.browser.BrowserActivity"); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
i.setData(Uri.parse(url)); 
startActivity(i); 

Ошибка я получаю это:

Unable to find explicit activity class { 
com.google.android.browser/com.android.browser.BrowserActivity}; 
have you declared this activity in your AndroidManifest.xml? 

Я также попытался фильтрации намерений в пакете:

i.setPackage("com.google.android.browser"); 

вместо setClassName, но :

No Activity found to handle Intent { act=android.intent.action.VIEW 
cat=[android.intent.category.BROWSABLE] 
dat=http://www.google.com/ flg=0x10000000 pkg=android } 

Я также попытался добавить в манифест <uses-library android:name="com.google.android.browser" />.

Я что-то упустил?

PS: Я не заинтересован в использовании startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"))), так как он перечислит все варианты просмотра Intent.

ответ

6

я использовать это, это нормально.

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

Я думаю, вы знаете, что неправильно. :)

6

Обратите внимание, что браузер по умолчанию может быть переопределен, и это не всегда встроенное приложение для браузера, это может быть, например, Opera Mini.

Вы должны сделать это так:

Intent intent = new Intent(Intent.ACTION_VIEW); 
Uri data = Uri.parse("http://www.google.com"); 
intent.setData(data); 
startActivity(intent); 
+4

Как я уже сказал в своем вопросе, я хочу иметь возможность запуска * браузера Android по умолчанию *, а не браузера * по умолчанию. В качестве бокового узла я сначала попытался с помощью упомянутого вами решения, но безрезультатно, поскольку он явно запускает браузер, который установлен по умолчанию (или запускает селектор приложений). –

+0

как использовать это намерение в классе без активности? – Maxwell

+0

Недостаток этого - для локальных html-файлов он запускает приложение HTMLViewer вместо браузера. – JustAMartin

1

Один из способов, чтобы открыть URL в браузере от кода заключается в использовании WebView.

Создать WebViewClientClass, расширяющий WebViewClient как:

public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    view.loadUrl(url); 
    return true; 
} 

Затем создайте WebView. Set webview.setWebViewClient(new WebViewClientClass()); --- Это небольшое обходное решение, так что веб-браузер по умолчанию не берет на себя.

Затем возьмите URL в EditText и установить его, чтобы загрузить браузер, как:

webview.loadurl(urlfield.getText().toString()); 
webview.requestFocus(); 

Это необходимо загрузить веб-браузер с URL, который вы просили.

Надеется, что это помогает ... :)

+0

не устанавливают webview.setWebViewClient, если вы хотите, чтобы ваш веб-браузер по умолчанию принял ваш запрос ... – Flash

+1

Я не хочу запускать окно браузера (или, если на то пошло, использовать * мой собственный браузер). Я хочу запустить браузер * по умолчанию, который поставляется с Android *.Кроме того, запуск окна браузера приведет к дополнительной сложности, например, к управлению кешем, закладкам, кнопке возврата и т. Д. И т. Д. Кстати, пожалуйста, отформатируйте свой код;) –

Смежные вопросы