Android: как получить значение UAProf в Android SDK?
В настоящее время я занимаюсь разработкой приложения для Android с компонентом WebView, который отображает веб-сайт, предназначенный для мобильных телефонов, и поэтому заголовок x-wap-profile должен быть отправлен на сайт для изменения размера CSS и изображений.
Может кто-нибудь помочь мне найти настройки устройства UAProf?
Я провел много поисков, но безуспешно.
Любая помощь будет оценена.
Заранее спасибо.
2 ответа
Может кто-нибудь помочь мне найти настройки устройства UAProf?
Там нет "Настройка устройства UAProf".
Вы можете использовать версию loadUrl()
где вы предоставляете свой собственный набор заголовков для включения желаемого заголовка. Обратите внимание, что это было добавлено в API Level 8 (он же Android 2.2) - AFAIK, в предыдущих версиях Android не было опций для предоставления пользовательских заголовков.
Вы также можете установить строку агента пользователя через WebSettings
, если рассматриваемый веб-сайт будет использовать это вместо желаемого заголовка.
UAProf предназначен для работы следующим образом: когда устройство отправляет HTTP-запрос на сервер, оно отправляет некоторые дополнительные заголовки принятия. Один из этих заголовков предоставляет ссылку на профиль UAProf для этого устройства, которое находится на сервере, обычно у производителя устройства или, возможно, у оператора сети. UAProf также может, при необходимости, отправлять переопределения как часть заголовков accept, хотя я никогда не видел, чтобы это происходило в дикой природе, но, по общему признанию, прошло много времени с тех пор, как я работал над UAProf.
Таким образом, в вашем случае вам нужно либо отправить заголовок профиля x-wap, указывающий на реальный профиль UAProf, либо, если такого профиля нет, вам нужно написать его. Я не использовал компонент WebView - я делаю java на стороне сервера - но возможно установить x-wap-профиль следующим образом, если вы используете HttpURLConnection:
HttpURLConnection urlconn = (HttpURLConnection) url.openConnection();
urlconn.setRequestProperty("X-Wap-Profile",
"http://wap.samsungmobile.com/uaprof/GT-I8190.xml");
Вы можете найти больше профилей UAProf на сайте валидатора Open Mobile Alliance.
Изучая исходный код Android, кажется, что нет способа получить доступ к профилю UAProf, связанному с устройством, из приложения Android. Однако у Android есть отдельный API, android.content, который предоставляет приложениям информацию об устройстве - вот пример. К сожалению, как только вы получите геометрию экрана, вам нужно будет преобразовать ее в профиль, что потребует немного работы.
Другое решение заключается в том, что если вы можете получить имя устройства от Android, то вы можете сопоставить его с базой данных профилей, которая сопоставляет имена устройств с профилями. Я не думаю, что такая база данных уже существует, но ее можно создать. Одной из отправных точек является список профилей в базе данных сайта валидатора OMA. К сожалению, это устарело, так как я несколько лет не работал с UAProf, но код, который я использовал для создания списка, доступен в DELI, библиотеке Java UAProf, которую я написал. Он запрашивает у Google информацию о последних профилях, но Google, как правило, обновляет дизайн своих веб-страниц, поэтому используемый им скребок может быть сломан.
Прежде чем сделать это, вы хотите проверить, будет ли веб-сайт использовать информацию UAProf - возможно, вы пишете сайт, и в этом случае все будет хорошо - но я подозреваю, что для сторонних сайтов многие не используют UAProf, потому что качество Профили UAProf очень изменчивы: если они вообще используют информацию об устройстве, они могут просто обнаружить строку пользовательского агента, а затем найти ее в кураторской коллекции профилей, такой как WURFL или аналогичное платное решение.