Откройте 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. Я даже немного посмотрел и не смог найти, какие вкладки были открыты. Еще одна вещь, которую вы можете попробовать, - это отслеживать, был ли пользователь недавно отправлен в действие браузера из вашего приложения, и проверьте, открыт ли браузер, но я снова вижу, что это происходит неправильно разными способами.

Ваша идея деятельности, вероятно, будет одной из лучших ставок в этой ситуации, хотя я могу понять, почему вы хотели бы этого избежать.