25 August 2013

วิธีตรวจสอบด้วยโค๊ดว่าเครื่องเป็น Smartphone หรือ Tablet

Updated on

บทความมาแปลกเช่นเคย เรื่องที่ชาวบ้านไม่ค่อยจะทำเหมือนเดิม
คราวนี้ก็เป็นเรื่องการเช็คว่าอุปกรณ์ของผู้ใช้เป็น Smartphone หรือ Tablet
โดยใช้คำสั่งในโค๊ดเพื่อเช็ค หรือเรียกกันทั่วไปว่า Programmatically


สำหรับบทความนี้ เจ้าของบล็อกจะใช้วิธีเช็คที่ขนาดหน้าจอนะครับ
ซึ่งเคยพูดถึงไปแล้วในหัวข้อบทความนี้นะครับ ลองให้อ่านดูก่อน

จากบทความข้างบนนี้จะเห็นว่า สามารถแบ่งได้ตามค่า SW หรือ Shortest-width
โดยที่ขนาด SW ที่น้อยกว่า 600dp จะเป็น Smartphone ถ้ามากกว่านั้นจะเป็น Tablet
(Tablet ที่สามารถโทรได้นี่ไม่นับนะ ไม่ได้อ้างอิงจากการที่โทรได้หรือไม่ได้)

ในการเช็คเจ้าของบล็อกจะไม่ใช้คำสั่งอะไรให้มากมายนัก
แต่จะใช้โฟลเดอร์ Resource เจ้ามาช่วยในการแยกขนาดให้ง่ายขึ้น

โดยใช้หลักการง่ายๆคือ สร้าง xml ที่เป็น String เก็บไว้ใน values
ซึ่งแบ่งเป็นสองโฟลเดอร์คือ values กับ values-sw600dp
โดยที่ String ในโฟลเดอร์ values เก็บ String ไว้ว่า phone
และโฟลเดอร์ values-sw600dp เก็บ String ไว้ว่า tablet
เวลาต้องการตรวจสอบก็เพียงแค่ดึง String ดังกล่าวออกมาเช็ค
เท่านี้ก็สามารถรู้ได้แล้วว่าเครื่องที่ใช้เป็นประเภทไหนนั่นเอง


มาดูลำดับการสร้างแบบทีละขั้นตอนกันเลยดีกว่า

เริ่มจากเปิดไฟล์ res/values/string.xml ขึ้นมา แล้วพิมเพิ่มเข้าไปตามนี้
<string name="device_type">phone</string>
ซึ่งเป็นการเพิ่ม Resource แบบ String ที่ชื่อ device_name เข้าไป
โดยกำหนดค่าเป็น "phone" ซึ่งจะอยู่ในโฟลเดอร์ values 

ต่อไปให้สร้างโฟลเดอร์ values-sw600dp ขึ้นมา ถ้าทำไม่เป็นก็ดูตามนี้





ก็ใช้วิธีสร้างโฟลเดอร์ขึ้นมาใหม่แล้วก๊อปไฟล์ string.xml มาวางน่ะแหละ
หรือจะใช้วิธีสร้างไฟล์ xml ขึ้นมาใหม่ในนั้นก็ได้เช่นกัน แต่ก๊อปก็ไวดี

จากนั้นให้เปิดไฟล์ดังกล่าวขึ้นมาแล้วลบให้เหลือแต่ของ device_type ก็พอ

คำถาม อ้าว ทำไมเจ้าของบล็อกต้องลบทิ้งด้วยล่ะ? 
ถ้าหน้าจอที่มากกว่า 600dp ต้องการดึง String จากอันที่ลบไปล่ะ?

ตอบ ถ้า String ที่กำหนดเหมือนกับที่กำหนดในโฟลเดอร์ values
ก็ไม่จำเป็นต้องสร้างเพิ่มก็ได้ เพราะโฟลเดอร์ values จะเป็น Default
ในกรณีที่จะดึง String อย่างพวก app_name ก็จะไปดึงใน values แทนได้
แต่ถ้ามี String อันไหนที่ต้องการกำหนดแยกกันก็ค่อยเพิ่มในนี้ทีหลัง

สำหรับการกำหนดค่าใน string.xml ก็เสร็จเรียบร้อยล่ะ ส่วน layout ก็ตามนี้เลย

main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="Device Type" android:textSize="25sp" /> </RelativeLayout>

จะมีแค่ Text View เอาไว้แสดงข้อความว่าเป็น phone หรือ tablet


Main.java
package app.akexorcist.checkdevicetype; import android.os.Bundle; import android.widget.TextView; import android.app.Activity; public class Main extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String device_type = getResources().getString(R.string.device_type); TextView textView = (TextView)findViewById(R.id.textView1); textView.setText(device_type); } }


คงไม่ต้องอธิบายอะไรมาก แค่ใช้คำสั่ง getResource() เพื่อดึงข้อมูลในโฟลเดอร์ res
โดยดึงข้อมูลที่เป็น String จาก R.string.device_type หรือก็คือที่อยู่ใน res/values/string.xml
และเมื่อได้ค่า String ดังกล่าวมาแล้วก็เอามาแสดงใน Text View ที่ได้สร้างไว้นั่นเอง

พอเอาไปเปิดบนเครื่อง Smartphone หรือหน้าจอมี SW น้อยกว่า 600dp จะแสดงว่า phone
และถ้าเอาไปเปิดบนเครื่อง Tablet หรือหน้าจอมี SW มากกว่า 600dp จะแสดงว่า tablet
ในการนำไปใช้งานจริงๆก็ให้ดึง String ดังกล่าวมา แล้วใช้ If เช็คว่าเป็นแบบไหน
แล้วก็ใช้คำสั่งแยกตามประเภทที่ต้องการได้เลย อย่างเช่นถ้าเป็น Smartphone 
จะให้ใช้คำสั่งชุดแรก แต่ถ้าเป็น Tablet จะให้ใช้คำสั่งชุดที่สอง เป็นต้น

ในกรณีที่ต้องการแยกย่อย Tablet อีกเป็นสองแบบคือแบบเล็กขนาดประมาณ 7 นิ้ว
กับแบบใหญ่ขนาดประมาณ 10 นิ้ว ก็ให้เพิ่มโฟลเดอร์ values-sw720dp เข้าไป

ในกรณีที่ต้องการแยกประเภทระหว่างเครื่องที่โทรได้กับโทรไม่ได้
วิธีนี้ใช้ไม่ได้นะเพราะก็มี Tablet หลายๆรุ่นที่โทรได้
ควรใช้คำสั่งเช็คที่ Call Service ว่าสามารถใช้งานหรือป่าว


สำหรับผู้ที่หลงเข้ามาอ่านคนใดต้องการไฟล์ตัวอย่าง
สามารถดาวน์โหลดได้ที่ Check Device Type [Google Drive]