Открытие URL в браузере Android вызывает поиск Google - PullRequest
0 голосов
/ 09 декабря 2011

У меня небольшая проблема с открытием определенного URL в браузере.Прежде всего, я использую следующий код для запуска браузера:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(Globals.currentChatURL)); 
startActivity(Intent.createChooser(browserIntent, "Select browser:"));

Теперь, если я установлю для Globals.currentChatURL что-то вроде http://www.google.com, он откроет этот сайт очень хорошо.Но мой URL немного сложнее, так как содержит несколько параметров, которые все закодированы в base64.Вот пример того, как выглядит мой URL:

http://webportal.mysite.com/ChatProgram/chat.php? intgroup = UFYyMA == & intid = UFYyMEZN & hg = Pw __ & pref = user & en = U0NPVFQgTUlMTEFS & ee = cGF1bG = EWFFFWFFFHFFFKFWFFKFKFRFFKFRFFKFWFFKFKFKFKFKFKFRKFKFRKFKFRKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKKFKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKHK тоже* Теперь, если я воспользуюсь приведенным выше кодом, чтобы попытаться запустить этот URL, он приведет меня на страницу поиска Google со следующим сообщением:

"Ваш поиск - http://URLabove ... не соответствует ни одномуDocuments "

Тем не менее, если я скопирую URL-адрес и вставлю его в адресную строку, это приведет меня в нужное место.Как я могу это исправить??Весь смысл в том, чтобы пользователь нажимал на кнопку и запускал сайт, а не для того, чтобы пользователю приходилось копировать и вставлять URL-адрес вручную.

Буду признателен за любые предложения.

Большое спасибо

1 Ответ

2 голосов
/ 09 декабря 2011

В части запроса вашего http URI есть нежелательные знаки равенства. Такие знаки имеют особое значение в качестве разделителей в виде &parameter=value. Эти знаки равенства представляют значения дополнения (0, 1 или 2) из ​​вашей кодировки base64.

Вы можете либо

  • удалите их, потому что ваш серверный декодер base64 не будет восстанавливать их, или

  • процентов кодируют их (со всеми другими зарезервированными символами).

В Android вы можете использовать процентное кодирование следующим образом:

String value = URLEncoder.encode("annoying values with reserved chars &=#", "utf-8");
String url = "http://stackoverflow.com/search?q=" + value;

RFC 2396 теперь устарела, но на этом основан URI.parse (), как указано в документации :

uriString URI, совместимый с RFC 2396,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...