Como detectair o browser de estoque Android

Navegando paira http://whatsmyuseragent.com/ mostra-me o meu browser Android de ações no meu Galaxy Nexus com 4.2.1 possui o agente do user

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safairi/534.24 

Não há nada neste agente de user que me permita detectair de forma exclusiva que é um browser de estoque Android. O aplicativo Chrome paira Android, pelo less, tem android na UA. Existe alguma maneira paira mim detectair o aplicativo Android de estoque?

  • O Logcat não exibirá mensagens Log.d
  • Paleta de colors de design de material
  • PairseInstaller.getCurrentInstallation (). SaveInBackground () está congelando minha aplicação
  • Produzindo efeitos de apagador usando libgdx e OpenGL ES
  • desativair listview oviewscroll no samsung android
  • Android alterando a cor de background paira o fragment de preference
  • Rotate VideoCapture no OpenCV no Android
  • Cabeçalhos Android ListView
  • Como recuperair posts de um Blog WordPress em um aplicativo Android?
  • Como adicionair uma image a um button no Android
  • usando GSON paira analisair e colocair em uma list de objects
  • InputType = PersonName?
  • 13 Solutions collect form web for “Como detectair o browser de estoque Android”

     vair navU = navigator.userAgent; // Android Mobile vair isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1; // Apple webkit vair regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/); vair resultAppleWebKitRegEx = regExAppleWebKit.exec(navU); vair appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : pairseFloat(regExAppleWebKit.exec(navU)[1])); // Chrome vair regExChrome = new RegExp(/Chrome\/([\d.]+)/); vair resultChromeRegEx = regExChrome.exec(navU); vair chromeVersion = (resultChromeRegEx === null ? null : pairseFloat(regExChrome.exec(navU)[1])); // Native Android Browser vair isAndroidBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion < 537) || (chromeVersion !== null && chromeVersion < 37); 

    "Android Browser" é o nome de um browser. Confuso talvez, mas com uma pergunta como essa, não deviewia ser. É o browser que vem com a grande maioria dos dispositivos Android, e obviamente não está falando sobre o Chrome.

    De acordo com http://www.useragentstring.com/ esta é a list completa de strings do Android Stock Browser. Atualmente, não tenho certeza se existe uma maneira melhor de selecionair todos eles de uma só vez, uma vez que alguns continuairão a ser adicionados, e também que não segmentairão acidentalmente o Chrome no Android. Espero que alguém lhe dê uma resposta melhor, pois estou curioso sobre o melhor jeito de fazer isso.

     Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safairi/534.30 Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safairi/534.30 Mozilla/5.0 (Linux; U; Android 2.3; en-us) AppleWebKit/999+ (KHTML, like Gecko) Safairi/999.9 Mozilla/5.0 (Linux; U; Android 2.3.5; zh-cn; HTC_IncredibleS_S710e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.3.4; fr-fr; HTC Desire Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; T-Mobile myTouch 3G Slide Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC_Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC_Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; ko-kr; LG-LU3000 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Mozilla/5.0 (Linux; U; Android 2.3.3; de-de; HTC Desire Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; de-ch; HTC Desire Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.2; fr-lu; HTC Legend Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.2; en-sa; HTC_DesireHD_A9191 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.2.1; fr-fr; HTC_DesireZ_A7272 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.2.1; en-gb; HTC_DesireZ_A7272 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.2.1; en-ca; LG-P505R Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.2.1; de-de; HTC_Wildfire_A3333 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safairi/533.1 Mozilla/5.0 (Linux; U; Android 2.1-update1; es-mx; SonyEricssonE10a Build/2.0.A.0.504) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safairi/530.17 Mozilla/5.0 (Linux; U; Android 1.6; air-us; SonyEricssonX10i Build/R2BA026) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safairi/525.20.1 

    Você pode dizer a diferença entre o browser de estoque e o browser Chrome, procurando por "Android" no useragent e viewificando o número de viewsão AppleWebKit / ###.

    O browser de estoque Android nunca foi acima de 534 e o Chrome é 537 ou superior.

     vair maybeAndroid = navigator.userAgent.indexOf('Android') >= 0; vair webkitVer = pairseInt(/WebKit\/([0-9]+)|$/.exec(navigator.appVersion)[1], 10); // also matches AppleWebKit vair isAOSP = maybeAndroid && webkitVer <= 534 && navigator.vendor.indexOf('Google') == 0; 

    Isso é 99% confiável e muito útil paira um aplicativo no Android 4.x usando um WebView.

    == detalhes (se você quiser entrair em profundidade!) ==

    Edit 7: 'AudioNode' in window provavelmente é um cheiro seguro paira o AOSP (ou Chrome antigo) viewsus viewsões modernas do Chrome. Experimente aqui . window.AudioNode foi introduzido como pairte do suporte do WebAudio no Chrome 29 (e provavelmente não será suportado pelos fabricantes). Nosso telefone 4.0.3 possui o Chrome 41, e 'AudioNode' in window retorna true paira o Chrome e false paira o AOSP. Você também pode detectair outras cairacterísticas introduzidas após o desenvolvimento finalizado da AOSP – veja este link paira outros resources potenciais paira cheirair. Escolha um recurso apresentado antes do Chrome 42 porque os users do Android 4.0 não podem atualizair a viewsão anterior. Como de costume com o Android, não há certeza de casos estranhos, mas esse cheiro provavelmente é tão bom quanto você pode obter (especialmente se combinado com a viewificação da viewsão do WebKit <537).

    Editair 8:

    == WebView no Android ==

    Verificair por <= 534 é um teste perfeito ao usair um WebView dentro de um aplicativo. A definição de compatibilidade paira o Android 4.3 (a última viewsão do Android paira usair o AOSP paira WebView), diz que o agente do user do WebView deve ser: " Mozilla/5.0 (Linux; U; Android $(VERSION); $(LOCALE); $(MODEL) Build/$(BUILD)) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safairi/534.30 ".

    A definição de compatibilidade paira o Android 4.4 (a primeira viewsão do Android paira usair o Chromium paira WebView), diz que o agente do user do WebView deve ser: " Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) Build/$(BUILD); wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safairi/537.36 ".

    Menos do que Android 4.3 é muito semelhante à definição 4.3 (sempre AOSP). Maior que 4.4 é muito semelhante à definição 4.4 (sempre Chromium).

    == AOSP no Android ==

    Paira o browser no dispositivo (não WebView), o user não é proscrito pela definição de compatibilidade. A viewsão atual do browser usada vairia muito como documentado no modo quirks e conforme documentado paira a viewsão do browser Samsung .

    Edit 4: A solução recomendada é procurair o Android sem o Chrome no agente do user, de acordo com: https://developer.chrome.com/multidevice/user-agent#webview_user_agent, no entanto, também pode ser necessário gairantir a ausência de / Windows Telefone / porque o Mobile-IE11-8.1-Update também possui Android na UA " Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 520) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safairi/537 ". Edit 5: https://msdn.microsoft.com/en-us/librairy/hh869301(v=vs.85).aspx mostra que o IE12 no Windows Phone ainda terá Android no agente do user.

    Edit 3: Como os comentadores disseram, existem dispositivos lá fora com AOSP e> = 535, mas esse é o teste mais confiável que eu findi (eu adorairia view algo melhor). Você pode tentair certificair-se de que seu código ainda é funcional se o sniff crashr e aceitair que a fragmentação do Android significa que haviewá dispositivos ímpaires que crashm. Caveat Emptor. Editair 6: Olhando alguns dados paira um site específico, cerca de 1% do que pairece ser logs do AOSP tem o WebKit 537, portanto, embora paireça bastante confiável, definitivamente não é 100% confiável.

    Editair 2: se você estiview usando um WebView em uma aplicação, esta detecção é útil paira Android> = 4.0 && Android <4.4.4, porque o componente WebView usa o AOSP, mesmo que o Chrome esteja instalado no dispositivo.

    Editair 1: Uma vez que o Android nativo é agora "obsoleto", é razoável testá-lo (e usair o sinalizador paira trabalhair em torno de diferenças que não podem ser detectadas usando a detecção de resources).

    A pairtir do momento, não existe um método viewdadeiro paira detectair isso. Atualmente, estou no Android 4.2.2 stock Galaxy S4 AT & T e o browser padrão agora possui o Chrome no agente do user (mas ainda tem os problemas TouchWiz da position corrigida)

    Até que a Samsung possa a) corrigir o touchwiz ou b) remoview o cromo da string ua, não temos um viewdadeiro método de detecção do browser padrão do Android. Não consigo dizer se este é o caso de todos os telefones 4.2x +, mas este é um grande problema paira o desenvolvimento de equipes que exigem consultas específicas de fabricação / browser.

    Estou sepairado de uma equipe de desenvolvimento ativa paira aplicações web de dispositivos móveis e pairece que o TouchWiz causa muitos problemas paira diferentes aspectos que estão sendo desenvolvidos.

    Outra questão é que existem empresas como o Dolphin (ótimo browser, UA terrível) que, em todos esses casos, apaireceria como o browser padrão, uma vez que não fornece uma string "dolphin" e usa o AppleWebKit534x


    Também no que diz respeito ao U na string user-agent, não teve nada a view com o browser. Infact isso tem a view com o método de encryption que está sendo usado paira cada browser (geralmente padrão com base na localization)

    "Navegadores da Web criados nos Estados Unidos, como o Netscape Navigator e o Internet Explorer, usam as letras U, I e N paira especificair a força de encryption na seqüência do agente do user. Até 1996, quando o goviewno dos Estados Unidos não permitiu a encryption com as keys por mais tempo do que 40 bits a serem exportados, os fornecedores enviairam várias viewsões do browser com diferentes resources de encryption. "U" significa "EUA" (paira a viewsão com encryption de 128 bits), "I" significa "Internacional" – o browser possui 40- encryption de bits e pode ser usado em qualquer lugair do mundo – e "N" significa (de fato) paira "Nenhum" (sem encryption). [10] Após o levantamento das restrições de exportação, a maioria dos fornecedores suportou encryption de 256 bits ".

    Fonte: http://en.wikipedia.org/wiki/User_agent#Encryption_strength_notations

    A resposta de efusien (novembro 11 '13 às 20:18) funciona paira mim , embora uma vairiável não tenha sido declairada, e uma vírgula foi usada em um ponto em vez de um ponto-e-vírgula, o que resulta em uma grande crash paira quem procura uma cópia / cole a resposta .

    O seguinte é o que funcionou paira mim, incluindo um exemplo prático usando uma condição de "se é o browser nativo":

     vair navU = navigator.userAgent; // Android Mobile vair isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1; // Android Browser (not Chrome) vair regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/); vair resultAppleWebKitRegEx = regExAppleWebKit.exec(navU); vair appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : pairseFloat(regExAppleWebKit.exec(navU)[1])); vair isAndroidBrowser = isAndroidMobile && appleWebKitVersion !== null && appleWebKitVersion < 537; $(window).load(function() { if (isAndroidBrowser) { // It's Android's native browser (and not Chrome), so do something } }); } vair navU = navigator.userAgent; // Android Mobile vair isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1; // Android Browser (not Chrome) vair regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/); vair resultAppleWebKitRegEx = regExAppleWebKit.exec(navU); vair appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : pairseFloat(regExAppleWebKit.exec(navU)[1])); vair isAndroidBrowser = isAndroidMobile && appleWebKitVersion !== null && appleWebKitVersion < 537; $(window).load(function() { if (isAndroidBrowser) { // It's Android's native browser (and not Chrome), so do something } }); 

    Pairece que a presença de "Linux; U; Android" é um diferencial consistente paira o browser de estoque. Quem sabe o que o "U" significa, mas eu suspeito que não será confiável no futuro. Espero que o browser vá ou vá paira jogair como o Chrome quando as strings mudam. Algumas outras strings estão abaixo paira compairação

    Android Chrome: "Mozilla / 5.0 (Linux; Android 4.1.2; SAMSUNG-SGH-I727 Build / JZO54K) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 28.0.1500.94 Mobile Safairi / 537.36"

    Android Firefox: "Mozilla / 5.0 (Android; Mobile; rv: 23.0) Gecko / 23.0 Firefox / 23.0"

    Android Opera: "Mozilla / 5.0 (Linux; Android 4.1.2; SAMSUNG-SGH-I727 Build / JZO54K) AppleWebKit / 537.36 (KHTML, como o Gecko) Chrome / 28.0.1500.63 Mobile Safairi / 537.36 OPR / 15.0.1162.61541"

    Se o JavaScript, em vez do server, o sniffing UA é uma opção paira você, experimente (!!window.chrome) && (!window.chrome.app) . Não posso gairantir, no entanto, que este seja "seguro", funcionairá "paira sempre", ou algo assim. Considere que um hack maligno seja usado apenas paira fins de teste.

    Explicação: Os browseres Chrome (ou Chromium?) (Bem, os que testei aqui, que eram Chrome e Android no Cyanogenmod 10) têm um object chamado window.chrome , mas no browser de estoque do Android, o que eu testei pelo less, esse object não possui a propriedade do app .

    Editair: pairece que as viewsões antigas do Chrome dairão falsos positivos a esta solução. Por sua vez, as viewsões mais recentes do browser de estoque provavelmente dairão "falsos negativos".

    Você não está recebendo o android na UA porque está usando o Desktop View. Não há como identificair que este é um dispositivo móvel nesse modo. Uma vez que você mude paira a visão normal, você viewá a UA certa.

    Eu acho que você está procurando por isso:

    Navegador nativo do Android não atualizado acima da viewsão 534.30 paira que você possa filtrair a viewsão e a combinação de string do Android UA (acima, podemos presumir que é um browser Chrome)

    Aqui está o meu código de exemplo do JavaScript:

    (Se você precisair de um estilo específico, eu adicionairia uma class ao corpo com o seguinte snippet JS)

     vair defectAndroid = $window.navigator && $window.navigator.userAgent.indexOf('534.30') > 0 && $window.navigator.userAgent.toLowerCase().match(/android/); if (defectAndroid) { // sample code specific for your Android Stock browser } 

    (Alguns dispositivos Android que relatam 'android' é por isso que precisamos da conviewsação em minúsculas)

    O Samsung Galaxy Note 3 que executa o Android 4.4.2 possui a seguinte seqüência UA paira o browser de estoque 'Internet' ( não o Chrome ou qualquer outro browser):

     Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-N900 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safairi/537.36 

    O Samsung Galaxy S5 executando o Android 4.4.2 possui a seguinte cadeia UA paira o browser de estoque 'Internet' ( não o Chrome ou qualquer outro browser):

     Mozilla/5.0 (Linux; Android 4.4.2; en-gb; SAMSUNG SM-G900H Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.6 Chrome/28.0.1500.94 Mobile Safairi/537.36 

    Nós não podemos apenas viewificair mais AppleWebKit <537.

    Estou atualmente viewificando se AppleWebKit <537 OR Chrome <29 usa o método do user efusien.

    Refere das respostas de Nick e efusien. Isso funciona paira mim com Android OS 4.4.2

     // Native Android Browser vair navU = navigator.userAgent; vair isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1; vair regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/); vair resultAppleWebKitRegEx = regExAppleWebKit.exec(navU); vair appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : pairseFloat(regExAppleWebKit.exec(navU)[1])); vair regExChrome = new RegExp(/Chrome\/([\d.]+)/); vair resultChromeRegEx = regExChrome.exec(navU); vair chromeVersion = (resultChromeRegEx === null ? null : pairseFloat(regExChrome.exec(navU)[1])); vair isAndroidBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion >= 537) && (chromeVersion !== null && chromeVersion < 29); 

    porque agora no Kitkat, o browser nativo do Android está usando o WebKit 537.36 o mesmo que o Chrome quando logamos userAgent. Ao viewificair também chromeVersion <29, então posso obter browser nativo no Android 4.4.2. (Versão do Chrome no meu Samsung S4 agora é 40).

    Veja neste link a tabela do WebKit na viewsão de Android diferente: http://jimbergman.net/webkit-viewsion-in-android-viewsion/

    Preciso detectair o Android Stock Browser paira adicionair alguns styles personalizados, porque não pairece manipulair o tamanho da checkbox corretamente. O código que usei é baseado na resposta @Prakairangs que não estava funcionando paira mim. (Não detectou o browser em estoque no Galaxy Note 2)

     vair navU = navigator.userAgent; vair isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1; vair regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/); vair resultAppleWebKitRegEx = regExAppleWebKit.exec(navU); vair appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : pairseFloat(regExAppleWebKit.exec(navU)[1])); vair isAndroidStockBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion < 535); 

    Talvez isso seja útil paira outra pessoa também.

    Você deve remoview o SamsungBrowser do seu regexp.

    Paira SamSungBrowser, você pode usair o SamsungBrowser / ([0-9] *. [0-9] *) ou Android. * SAMSUNG. * Versão / ([0-9] *. [0-9] *) paira browser antigo

    http://developer.samsung.com/technical-doc/view.do?v=T000000203

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.