ActivityNotFoundException в TextView с autoLink = "web"

Как поймать ActivityNotFoundException если щелкнуть TextView потому что он отображает веб-сайт?

Если на устройстве нет обозревателя, он выдает это исключение.

XML:

 <TextView android:id="@+id/tvTextView" android:autoLink="web" /> 

Ява:

 TextView tvTextView = (TextView) findViewById(R.id.tvTextView); tvTextView.setText("http://www.stackoverflow.com/"); 

Solutions Collecting From Web of "ActivityNotFoundException в TextView с autoLink = "web""

Вы можете проверить, есть ли Activity для обработки вашего намерения со следующим:

 Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse("http://www.stackoverflow.com")); PackageManager manager = context.getPackageManager(); List<ResolveInfo> infos = manager.queryIntentActivities(intent, 0); if (infos.size() > 0) { //At least one application can handle your intent //Put this code in onCreate and only Linkify the TextView from here //instead of using android:autoLink="web" in xml Linkify.addLinks(tvTextView, Linkify.WEB_URLS); // or tvTextView.setAutoLinkMask(Linkify.WEB_URL), as suggested by Little Child }else{ //No Application can handle your intent, notify your user if needed } 

startActivity() в блоке try-catch . Это все.
Ваш catch будет обрабатывать ActivityNotFoundException .

Обновление, основанное на ответе 2Dee:
Что нужно сделать, так это то, что вместо использования autoLink:web в XML, OP должен сначала создать намерение открыть веб-сайт, скажем, Google. Пока в onCreate() , посмотрите, есть ли Activity для его обработки. Если да, setAutoLinkMask(Linkify.WEB_URL) TextView и вызовите setAutoLinkMask(Linkify.WEB_URL)

Фрагмент кода:

 Intent checkBrowser = new Intent(Intent.ACTION_VIEW); checkBrowser.setData("http://www.grumpycat.com"); List<ResolveInfo> info = context.getPackageManager().queryIntentActivities(checkBrowser,0); if(info.getSize() > 0){ TextView tv = (TextView) findElementById(R.id.tv); tv.setAutoLinkMask(Linkify.WEB_URL); } 

Вы можете использовать эту функцию, чтобы проверить, доступен ли браузер

 public boolean isBrowserAvailable(Context c) { Intent i = new Intent(Intent.ACTION_VIEW); i.setData("http://www.google.com");//or any other "known" url List<ResolveInfo> ia = c.getPackageManager().queryIntentActivities(i, 0); return (ia.size() > 0); } 

И затем, в onCreate , вы решаете, сделаете ли это автоповторным или нет.

  if (isBrowserAvailable(this) tvTextView.setAutoLinkMask(Linkify.WEB_URL)