Bagaimana cara mendeteksi Tablet Android secara umum. Agen pengguna?

103

Saya telah mencari kemana-mana. Kami menggunakan Motorola Zoom untuk mencoba pengujian situs tablet kami. Masalahnya adalah Agen Pengguna Android adalah Agen Pengguna umum dan tidak ada perbedaan antara tablet Android dan seluler Android. Saya tidak ingin hanya menargetkan perangkat tertentu seperti Agen Pengguna Xoom karena Android kemungkinan besar akan ada di beberapa perangkat tablet dalam waktu dekat.

Kami menggunakan Umbraco CMS, dan kami telah melihat menggunakan solusi 51Degrees.mobi, dan saat ini ini tidak akan berfungsi untuk kebutuhan kami. Mungkin di masa depan. Saya tahu 51Degrees dan beberapa orang di Umbraco akan melakukan beberapa integrasi ke Umbraco, tetapi proyek akhir mungkin tidak akan keluar selama beberapa bulan.
Oleh karena itu, mengapa kami ingin mendeteksi String Agen Pengguna dari tablet Android dan membuatnya tidak langsung ke situs seluler kami seperti saat ini.

Jika ada yang tahu cara mendeteksi dan Tablet Android secara umum, bukan perangkat tertentu akan sangat membantu.

ClosDesign
sumber
2
Saya hanya menebak-nebak, tapi mungkin ada cara untuk melihat seberapa tinggi resolusi menontonnya juga?
Telepon
@Phonon, Ya, kami mencoba menggunakan Javascript untuk mengirim nilai res kembali ke server. Kami mencoba kami __doPostBack tetapi itu tampaknya tidak mengirimkan nilai kami kembali. Kami memiliki nilai masukan tersembunyi, ini menunjukkan sisi klien tetapi kami tidak mendapatkannya kembali di sisi server.
ClosDesign
Tidak yakin apakah saya dapat membantu Anda di sini.
Telepon

Jawaban:

112

Masalahnya adalah User-Agent Android adalah User-Agent umum dan tidak ada perbedaan antara tablet Android dan ponsel Android.

Ini salah Ponsel Android memiliki string "Seluler" di header User-Agent. Tablet Android tidak.

Namun perlu disebutkan bahwa ada beberapa tablet yang melaporkan Safari "Seluler" di UserAgent dan yang terakhir ini bukan satu-satunya cara / cara yang solid untuk membedakan antara Seluler dan Tablet.

CommonsWare
sumber
3
Anda benar. Saya baru saja mencari string yang berisi Android. Saya harus mencari string yang berisi Android dan! Mobile. Menemukan artikel oleh Tim Bray tentang ini.
ClosDesign
6
@yoavf: Tampaknya telah diperbaiki dengan pembaruan Android 3.1 XOOM. Saya memiliki XOOM dan baru saja mengujinya - tidak ada "seluler".
CommonsWare
27
Jawaban ini tidak sepenuhnya benar. Ada beberapa tablet - bahkan Kindle Fire terbaru - yang melaporkan Safari "Seluler" dalam string userAgent. Tampaknya tidak ada cara yang solid untuk mendeteksi tablet vs. ponsel pada saat ini kecuali kombinasi dari userAgent dan kemungkinan dukungan untuk deteksi resolusi.
Vernonk
22
Salah! samsung galaxy tab jelas merupakan tablet tetapi memiliki "seluler" di agen penggunanya
puchu
1
Saya yakin penambahan "seluler" ada pada Android 4, masih banyak perangkat sebelum 4 ... Untuk android 2.x saya menganggap ponsel, untuk 3.x saya menganggap tablet (meskipun akan ada beberapa kesalahan positif) ... jika tidak, Anda dapat menguji untuk ponsel ...
Tracker1
20

@Carlos: Dalam artikelnya Tim Bray merekomendasikan ini (seperti halnya posting lain oleh Google ), tetapi sayangnya itu tidak diterapkan oleh semua produsen tablet.

... Sebaiknya produsen perangkat dengan faktor bentuk besar menghapus "Seluler" dari Agen Pengguna ...

Sebagian besar string agen pengguna tablet Android yang pernah saya lihat menggunakan safari seluler, misalnya Samsung Galaxy Tab:

Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, seperti Gecko) Versi / 4.0 Mobile Safari / 533.1

Jadi saat ini saya sedang memeriksa nama perangkat untuk mendeteksi tablet Android. Selama hanya ada beberapa model di pasaran, tidak apa-apa tetapi segera ini akan menjadi solusi yang buruk.

Setidaknya dalam kasus XOOM, bagian seluler tampaknya hilang:

Mozilla / 5.0 (Linux; U; Android 3.0; en-us; Xoom Build / HRI39) AppleWebKit / 534.13 (KHTML, seperti Gecko) Versi / 4.0 Safari / 534.13

Tetapi karena saat ini hanya ada tablet dengan Andorid 3.x, memeriksa di Android 3 sudah cukup.

Bitwalker
sumber
1
dapatkah Anda memposting daftar perangkat yang Anda periksa dan kodenya.
LTech
12

Lebih baik juga mendeteksi agen-pengguna "seluler"

Meskipun Anda mungkin masih ingin mendeteksi "android" di User-Agent untuk mengimplementasikan fitur khusus Android, seperti pengoptimalan layar sentuh, pesan utama kami adalah: Jika situs seluler Anda bergantung pada sniffing UA, harap deteksi string "seluler" dan "android", bukan hanya "android", di User-Agent. Ini membantu melayani pengunjung seluler dan tablet Anda dengan baik.

Mendeteksi perangkat Android melalui Browser

 < script language="javascript"> <!--
     var mobile = (/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase()));
              if (mobile) {
                  alert("MOBILE DEVICE DETECTED");
                  document.write("<b>----------------------------------------<br>")
                  document.write("<b>" + navigator.userAgent + "<br>")
                  document.write("<b>----------------------------------------<br>")
                  var userAgent = navigator.userAgent.toLowerCase();
                  if ((userAgent.search("android") > -1) && (userAgent.search("mobile") > -1))
                         document.write("<b> ANDROID MOBILE <br>")
                   else if ((userAgent.search("android") > -1) && !(userAgent.search("mobile") > -1))
                       document.write("<b> ANDROID TABLET <br>")
              }
              else
                  alert("NO MOBILE DEVICE DETECTED"); //--> </script>
Jorgesys
sumber
3
Ini bekerja dengan sempurna. Saya menambahkan ini untuk iPad dan iPhone / iPod. else if (userAgent.search("ipad") > -1) document.write("<b> iPad <br>") else if ((userAgent.search("iphone") > -1)||(userAgent.search("ipod") > -1)) document.write("<b> iPhone or iPod <br>")
Spencer Cole
Bagaimana cara kerjanya untuk mozilla / 5.0 (linux; u; android 2.2; en-gb; gt-p1000 build / froyo) applewebkit / 533.1 (khtml, like gecko) versi / 4.0 mobile safari / 533.1 yang memiliki kata 'mobile' di dalamnya untuk Samsung Galaxy Tablet?
LTech
8

Anda dapat mencoba skrip ini karena Anda tidak ingin menargetkan Xoom saja. Saya tidak memiliki Xoom, tetapi harus bekerja.

function mobile_detect(mobile,tablet,mobile_redirect,tablet_redirect,debug) {
var ismobile = (/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i.test(navigator.userAgent.toLowerCase()));
var istablet = (/ipad|android|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(navigator.userAgent.toLowerCase()));

if (debug == true) {
    alert(navigator.userAgent);
}

if (ismobile && mobile==true) {
    if (debug == true) {
        alert("Mobile Browser");
    }
    window.location = mobile_redirect;
} else if (istablet && tablet==true) {
    if (debug == true) {
        alert("Tablet Browser");
    }
    window.location = tablet_redirect;
}
}

Saya membuat proyek di github. Lihat - https://github.com/codefuze/js-mobile-tablet-redirect . Jangan ragu untuk mengirimkan masalah jika ada yang salah!

CodeFuze
sumber
1
Ini tidak akan berfungsi untuk versi Android> 3.0, seperti ICS (4.0). Saya pikir jawaban yang diterima adalah yang benar - periksa apakah "Mobile Safari" ada di agen pengguna.
Suman
Tidak yakin tentang Kindles lain, tetapi Kindle Fire 1 TIDAK memiliki 'kindle' dalam string agen penggunanya - juga tidak mengandung 'android'; satu-satunya petunjuk adalah kata-kata 'Silk' dan 'Silk-Accelerated'.
mklement0
6

Setelah saya mendeteksi Android di agen pengguna, inilah cara saya membedakan antara browser tablet dan smartphone (ini menggunakan Python, tetapi juga sederhana untuk bahasa pemrograman lain):

if ("Android" in agent):
  if ("Mobile" in agent):
    deviceType = "Phone"
  else:
    deviceType = "Tablet"

DIPERBARUI: untuk mencerminkan penggunaan Chrome di Android, sesuai komentar di bawah.

Suman
sumber
Mengapa tidak mencari "Seluler" di agen?
Eren Tantekin
Saya rasa itu mungkin berhasil juga, tapi menurut saya mungkin berbahaya untuk mencari hanya "Seluler" - mungkin ada perangkat dengan nama, katakanlah "HTC Mobile", dll. Saya rasa ini adalah pendekatan yang disarankan.
Suman
1
Sekarang Google merilis Chrome untuk Android, pendekatan Anda mungkin sedikit bermasalah. Karena, Chrome di Android akan melaporkan dirinya sebagai "Chrome Seluler", bukan "Mobile Safari" seperti biasa seperti yang dilakukan browser Android saham. Untuk beberapa rekomendasi resmi: developers.google.com/chrome/mobile/docs/user-agent
Eren Tantekin
4

Berdasarkan string Agen di situs ini:

http://www.webapps-online.com/online-tools/user-agent-strings

Hasil ini muncul:
Pertama:

Semua Perangkat Tablet memiliki:
1. Tablet
2. iPad

Kedua:

Semua Perangkat Telepon memiliki:
1. Ponsel
2. Telepon

Ketiga:

Perangkat Tablet dan Telepon memiliki:
1. Android

Jika Anda dapat mendeteksi tingkat demi tingkat, saya kira hasilnya 90 persen benar. Seperti Saluran Perangkat SharePoint.

Jalali Shakib
sumber
2

Inilah yang saya gunakan:

public static boolean onTablet()
    {
    int intScreenSize = getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;

    return (intScreenSize == Configuration.SCREENLAYOUT_SIZE_LARGE) // LARGE
    || (intScreenSize == Configuration.SCREENLAYOUT_SIZE_LARGE + 1); // Configuration.SCREENLAYOUT_SIZE_XLARGE
    }
Regis St-Gelais
sumber
2

Meskipun kami tidak dapat mengatakan jika beberapa tablet menghilangkan "seluler", banyak termasuk Samsung Galaxy Tab yang memiliki perangkat seluler di agen penggunanya, sehingga tidak mungkin untuk mendeteksi antara tablet Android dan ponsel Android tanpa harus memeriksa spesifikasi model. IMHO ini hanya membuang-buang waktu kecuali jika Anda berencana memperbarui dan memperluas daftar perangkat Anda setiap bulan.

Sayangnya solusi terbaik di sini adalah mengeluh kepada Google tentang hal ini dan meminta mereka memperbaiki Chrome untuk Android sehingga menambahkan beberapa teks untuk mengidentifikasi antara perangkat seluler dan tablet. Neraka bahkan satu huruf M ATAU T di tempat tertentu dalam string sudah cukup, tapi saya rasa itu terlalu masuk akal.

D Langhorne
sumber
1

Xoom memiliki kata Xoom di agen pengguna: Mozilla / 5.0 (Linux; U; Android 3.0.1; en-us; Xoom Build / HRI66) AppleWebKit / 534.13 (KHTML, seperti Gecko) Versi / 4.0 Safari / 534.13

Galaxy Tab memiliki "Seluler" di agen pengguna: Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, seperti Gecko) Versi / 4.0 Mobile Safari / 533.1

Jadi, mudah untuk mendeteksi Xoom, sulit untuk mendeteksi apakah versi Android tertentu mobile atau tidak.

travyo
sumber
1

Kebanyakan tablet modern menjalankan honeycomb alias 3.x. Tidak ada ponsel yang menjalankan 3.x secara default. Sebagian besar tablet yang saat ini menjalankan 2.x memiliki kapasitas lebih kecil dan mungkin lebih baik jika disajikan dengan situs seluler. Saya tahu ini tidak sempurna .. tapi saya rasa itu jauh lebih akurat daripada tidak adanya ponsel ..

gjr
sumber
1
Sebenarnya ponsel bahkan tidak dapat menjalankan 3.x karena itu adalah rilis khusus tablet Android dan tidak bersumber terbuka.
Eren Tantekin
1

Meskipun Seluler Android mungkin memiliki "seluler" dalam string agen penggunanya, bagaimana jika menggunakan Opera Mobile untuk Android di Tablet? Ini akan tetap memiliki "seluler" dalam string agen penggunanya, tetapi harus menampilkan situs berukuran Tablet. Anda harus menguji "seluler" yang tidak didahului oleh "opera", bukan hanya "seluler"

atau Anda bisa melupakan Opera Mobile.

GeeItSomeLaldy
sumber
1
Opera mobile tidak menggunakan 'mobile' dalam string pengguna, melainkan menggunakan 'mobi'. Lihat di sini
Ian Stanway
2
Opera Mobile untuk seluler memiliki "Opera Mobi" di string agen pengguna, tetapi Opera Mobile untuk tablet memiliki "Opera Tablet" di string agen pengguna.
tagawa
1

Saya akan merekomendasikan menggunakan Categorizr untuk mendeteksi apakah pengguna menggunakan tablet. Anda dapat melihat hasil tes kategorisasi di sini .

hibrida
sumber
1

Jika Anda menggunakan tidak adanya "Seluler" maka itu hampir benar. Namun ada HTC Sensation 4G (4.3 inci dengan android 2.X) yang tidak mengirimkan kata kunci Seluler.

Alasan mengapa Anda mungkin ingin memperlakukannya secara terpisah adalah karena iframesdll.

zel
sumber
0

51Degrees beta, 1.0.1.6 dan rilis stabil terbaru 1.0.2.2 (28/4/2011) sekarang memiliki kemampuan untuk mengendus tablet. Pada dasarnya di sepanjang garis:

string capability = Request.Browser["is_tablet"];

Semoga ini bisa membantu Anda.

Joey Schluchter
sumber
0

Coba OpenDDR , ini gratis tidak seperti kebanyakan solusi lain yang disebutkan.

Werner Keil
sumber