Откройте URL-адрес в браузере Android, избегайте нескольких вкладок
Мой проект - это в основном веб-приложение. Теперь у меня есть приложение для Android с виджетами на домашнем экране и вы хотите открыть веб-страницу во встроенном браузере при некоторых действиях пользователя. Это просто. В MyAppWidgetProvider.onUpdate я создаю новое намерение:
Intent intent = new Intent("android.intent.action.VIEW",
Uri.parse("http://my.example.com/"));
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
views.setOnClickPendingIntent(R.id.text, pendingIntent);
К сожалению, новое окно/вкладка браузера открывается каждый раз, когда пользователь нажимает на виджет. Моя страница содержит некоторые причудливые AJAX/javascript, работающие в фоновом режиме и регулярно отправляющие HTTP-запросы. Таким образом, я получаю 8 вкладок, содержащих одну страницу, и непрерывно отправляю 8-кратное количество запросов HTTP.
Есть ли какой-либо способ, например. различные действия или дополнительные параметры, чтобы не открывать новые вкладки?
В качестве обходного пути я сейчас думаю о создании нового действия, содержащего WebView, но хотел бы избежать этой сложности.
Ответы
Ответ 1
Да, это возможно.
Используйте http://developer.android.com/reference/android/provider/Browser.html#EXTRA_APPLICATION_ID, чтобы убедиться, что одна и та же вкладка браузера используется повторно для вашего приложения. Например:
Context context = widget.getContext();
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
Ответ 2
Насколько я знаю, нет способа указать, открыта ли новая вкладка или нет, с помощью Intent. Я даже немного посмотрел и не смог найти, какие вкладки были открыты.
Еще одна вещь, которую вы можете попробовать, - это отслеживать, был ли пользователь недавно отправлен в действие браузера из вашего приложения, и проверьте, открыт ли браузер, но я снова вижу, что это происходит неправильно разными способами.
Ваша идея деятельности, вероятно, будет одной из лучших ставок в этой ситуации, хотя я могу понять, почему вы хотели бы этого избежать.