Google Play ใช้<uses-feature>
องค์ประกอบที่ประกาศในไฟล์ Manifest ของแอปเพื่อกรองแอปของคุณออกจากอุปกรณ์ที่มีคุณสมบัติไม่ตรงตามข้อกำหนดของฮาร์ดแวร์และซอฟต์แวร์
การระบุฟีเจอร์ที่จําเป็นสําหรับแอปพลิเคชันเป็นการอนุญาตให้ Google Play แสดงแอปพลิเคชันต่อผู้ใช้ที่มีอุปกรณ์ตรงตามข้อกําหนดของฟีเจอร์แอปพลิเคชันเท่านั้น แทนที่จะแสดงต่อผู้ใช้ทุกคน
ดูข้อมูลสำคัญเกี่ยวกับวิธีที่ Google Play ใช้ฟีเจอร์เป็นพื้นฐานในการกรองได้ที่ส่วน Google Play และการกรองตามฟีเจอร์
- ไวยากรณ์:
-
<uses-feature android:name="string" android:required=["true" | "false"] android:glEsVersion="integer" />
- อยู่ใน
<manifest>
- description:
ประกาศฟีเจอร์ฮาร์ดแวร์หรือซอฟต์แวร์รายการเดียวที่แอปพลิเคชันใช้
วัตถุประสงค์ของ
<uses-feature>
ประกาศคือเพื่อแจ้งให้บุคคลภายนอกทราบถึงชุดฟีเจอร์ฮาร์ดแวร์และซอฟต์แวร์ที่แอปพลิเคชันของคุณต้องใช้ องค์ประกอบนี้มีแอตทริบิวต์required
ที่ช่วยให้คุณระบุได้ว่าแอปพลิเคชันจำเป็นต้องใช้ฟีเจอร์ที่ประกาศไว้และไม่สามารถทำงานได้หากไม่มีฟีเจอร์ดังกล่าว หรือต้องการใช้ฟีเจอร์ดังกล่าวแต่ทำงานได้หากไม่มีเนื่องจากการรองรับฟีเจอร์อาจแตกต่างกันไปตามอุปกรณ์ Android องค์ประกอบ
<uses-feature>
จึงมีบทบาทสําคัญในการช่วยให้แอปพลิเคชันอธิบายฟีเจอร์ที่เปลี่ยนแปลงตามอุปกรณ์ซึ่งแอปพลิเคชันใช้ชุดฟีเจอร์ที่ใช้ได้ซึ่งแอปพลิเคชันของคุณประกาศจะสอดคล้องกับชุดค่าคงที่ของฟีเจอร์ที่ Android
PackageManager
มีให้บริการ ค่าคงที่ของฟีเจอร์จะแสดงอยู่ในส่วนข้อมูลอ้างอิงฟีเจอร์ในเอกสารนี้คุณต้องระบุฟีเจอร์แต่ละรายการในองค์ประกอบ
<uses-feature>
แยกกัน ดังนั้นหากแอปพลิเคชันต้องใช้หลายฟีเจอร์ ระบบจะประกาศองค์ประกอบ<uses-feature>
หลายรายการ ตัวอย่างเช่น แอปพลิเคชันที่ต้องมีทั้งฟีเจอร์บลูทูธและกล้องในอุปกรณ์จะประกาศองค์ประกอบ 2 รายการต่อไปนี้<uses-feature android:name="android.hardware.bluetooth" android:required="true" /> <uses-feature android:name="android.hardware.camera.any" android:required="true" />
โดยทั่วไปแล้ว ให้ประกาศองค์ประกอบ
<uses-feature>
สำหรับฟีเจอร์ทั้งหมดที่แอปพลิเคชันของคุณต้องใช้เสมอองค์ประกอบ
<uses-feature>
ที่ประกาศไว้มีไว้เพื่อแจ้งข้อมูลเท่านั้น ซึ่งหมายความว่าระบบ Android เองจะไม่ตรวจสอบการรองรับฟีเจอร์ที่ตรงกันในอุปกรณ์ก่อนติดตั้งแอปพลิเคชันอย่างไรก็ตาม บริการอื่นๆ เช่น Google Play และแอปพลิเคชันสามารถตรวจสอบประกาศ
<uses-feature>
ของแอปพลิเคชันคุณเป็นส่วนหนึ่งของการจัดการหรือการโต้ตอบกับแอปพลิเคชัน ด้วยเหตุนี้ คุณจึงควรประกาศฟีเจอร์ทั้งหมดที่แอปพลิเคชันใช้สำหรับฟีเจอร์บางอย่างอาจมีแอตทริบิวต์ที่เฉพาะเจาะจงซึ่งให้คุณกำหนดเวอร์ชันของฟีเจอร์ เช่น เวอร์ชันของ Open GL ที่ใช้ (ประกาศด้วย
glEsVersion
) ฟีเจอร์อื่นๆ ที่มีหรือไม่มีในอุปกรณ์ เช่น กล้อง จะประกาศโดยใช้แอตทริบิวต์name
แม้ว่าระบบจะเปิดใช้งานองค์ประกอบ
<uses-feature>
เฉพาะสำหรับอุปกรณ์ที่ใช้ API ระดับ 4 ขึ้นไป แต่ให้ใส่องค์ประกอบเหล่านี้สำหรับแอปพลิเคชันทั้งหมด แม้ว่าminSdkVersion
จะเท่ากับ 3 หรือต่ำกว่าก็ตาม อุปกรณ์ที่ใช้แพลตฟอร์มเวอร์ชันเก่าจะไม่สนใจองค์ประกอบนี้หมายเหตุ: เมื่อประกาศฟีเจอร์ โปรดทราบว่าคุณต้องขอสิทธิ์ตามความเหมาะสมด้วย เช่น คุณต้องขอสิทธิ์
CAMERA
ก่อนแอปพลิเคชันจะเข้าถึง Camera API ได้ การขอสิทธิ์เป็นการให้สิทธิ์แอปพลิเคชันเข้าถึงฮาร์ดแวร์และซอฟต์แวร์ที่เหมาะสม การประกาศฟีเจอร์ที่แอปพลิเคชันของคุณใช้จะช่วยให้มั่นใจได้ว่าอุปกรณ์จะใช้งานร่วมกันได้อย่างถูกต้อง- แอตทริบิวต์
-
-
android:name
- ระบุฟีเจอร์ฮาร์ดแวร์หรือซอฟต์แวร์เดียวที่แอปพลิเคชันใช้เป็นสตริงตัวบ่งชี้ ค่าแอตทริบิวต์ที่ถูกต้องจะแสดงอยู่ในส่วนฟีเจอร์ฮาร์ดแวร์และฟีเจอร์ซอฟต์แวร์ ค่าแอตทริบิวต์เหล่านี้จะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
-
android:required
-
ค่าบูลีนที่ระบุว่าแอปพลิเคชันต้องใช้ฟีเจอร์ที่ระบุใน
android:name
หรือไม่- การประกาศ
android:required="true"
สำหรับฟีเจอร์หนึ่งๆ บ่งบอกว่าแอปพลิเคชันไม่สามารถทำงานหรือไม่ได้ออกแบบมาให้ทำงานเมื่อไม่มีฟีเจอร์ที่ระบุในอุปกรณ์ - การประกาศ
android:required="false"
สำหรับฟีเจอร์หนึ่งๆ บ่งบอกว่าแอปพลิเคชันใช้ฟีเจอร์นั้นหากมีในอุปกรณ์ แต่ออกแบบมาให้ทำงานได้โดยไม่ต้องใช้ฟีเจอร์ที่ระบุ หากจำเป็น
ค่าเริ่มต้นของ
android:required
คือ"true"
- การประกาศ
android:glEsVersion
- เวอร์ชัน OpenGL ES ที่แอปพลิเคชันต้องใช้ โดย 16 บิตที่สูงกว่าจะแสดงค่าหลัก และ 16 บิตที่ต่ำกว่าจะแสดงค่าย่อย เช่น หากต้องการระบุ OpenGL ES เวอร์ชัน 2.0 ให้ตั้งค่าเป็น "0x00020000" หรือหากต้องการระบุ OpenGL ES 3.2 ให้ตั้งค่าเป็น "0x00030002"
แอปพลิเคชันระบุแอตทริบิวต์
android:glEsVersion
ไม่เกิน 1 รายการในไฟล์ Manifest หากระบุมากกว่า 1 รายการ ระบบจะใช้android:glEsVersion
ที่มีค่าตัวเลขสูงสุดและละเว้นค่าอื่นๆหากแอปพลิเคชันไม่ได้ระบุ
android:glEsVersion
แอตทริบิวต์ ระบบจะถือว่าแอปพลิเคชันต้องใช้เฉพาะ OpenGL ES 1.0 ซึ่งอุปกรณ์ Android ทุกรุ่นรองรับแอปพลิเคชันจะถือว่าหากแพลตฟอร์มรองรับ OpenGL ES เวอร์ชันหนึ่งๆ ก็จะรองรับ OpenGL ES เวอร์ชันที่ต่ำกว่าทั้งหมดด้วย ดังนั้น สำหรับแอปพลิเคชันที่ต้องมีทั้ง OpenGL ES 1.0 และ OpenGL ES 2.0 ให้ระบุว่าต้องใช้ OpenGL ES 2.0
สําหรับแอปพลิเคชันที่ทํางานร่วมกับ OpenGL ES หลายเวอร์ชัน ให้ระบุเฉพาะ OpenGL ES เวอร์ชันต่ำสุดที่จําเป็น เครื่องมือนี้จะตรวจสอบที่รันไทม์ว่า OpenGL ES ระดับที่สูงขึ้นพร้อมใช้งานหรือไม่
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ OpenGL ES รวมถึงวิธีตรวจสอบเวอร์ชัน OpenGL ES ที่รองรับขณะรันไทม์ได้ที่คู่มือ API ของ OpenGL ES
-
- เปิดตัวใน
- API ระดับ 4
- ดูข้อมูลเพิ่มเติมได้ที่
Google Play และการกรองตามฟีเจอร์
Google Play จะกรองแอปพลิเคชันที่แสดงต่อผู้ใช้เพื่อให้ผู้ใช้ดูและดาวน์โหลดได้เฉพาะแอปพลิเคชันที่เข้ากันได้กับอุปกรณ์ของตน หนึ่งในวิธีกรองแอปพลิเคชันคือความเข้ากันได้ของฟีเจอร์
Google Play จะเปรียบเทียบข้อมูลต่อไปนี้เพื่อพิจารณาความเข้ากันได้ของฟีเจอร์แอปพลิเคชันกับอุปกรณ์ของผู้ใช้
- ฟีเจอร์ที่จําเป็นสําหรับแอปพลิเคชันตามที่ประกาศไว้ในองค์ประกอบ
<uses-feature>
ในไฟล์ Manifest ของแอปพลิเคชัน - ฟีเจอร์ที่มีในอุปกรณ์ ไม่ว่าจะเป็นฮาร์ดแวร์หรือซอฟต์แวร์ตามที่รายงานโดยใช้พร็อพเพอร์ตี้ระบบแบบอ่านอย่างเดียว
เครื่องมือจัดการแพ็กเกจ Android มีชุดค่าคงที่ของฟีเจอร์ที่แชร์กันซึ่งทั้งแอปพลิเคชันและอุปกรณ์ใช้เพื่อประกาศข้อกำหนดและการสนับสนุนฟีเจอร์ เพื่อให้เปรียบเทียบฟีเจอร์ได้อย่างถูกต้อง ค่าคงที่ของฟีเจอร์ที่ใช้ได้จะแสดงอยู่ในส่วนข้อมูลอ้างอิงฟีเจอร์ในเอกสารนี้และในเอกสารประกอบของคลาสสำหรับ PackageManager
เมื่อผู้ใช้เปิด Google Play แอปพลิเคชันจะค้นหารายการฟีเจอร์ที่มีในอุปกรณ์จากเครื่องมือจัดการแพ็กเกจโดยเรียกใช้ getSystemAvailableFeatures()
จากนั้นแอปพลิเคชัน Store จะส่งรายการฟีเจอร์ไปยัง Google Play เมื่อสร้างเซสชันให้กับผู้ใช้
ทุกครั้งที่คุณอัปโหลดแอปพลิเคชันไปยัง Google Play Console ทาง Google Play จะสแกนไฟล์ Manifest ของแอปพลิเคชัน โดยจะค้นหาองค์ประกอบ <uses-feature>
และประเมินร่วมกับองค์ประกอบอื่นๆ ในบางกรณี เช่น องค์ประกอบ <uses-sdk>
และ <uses-permission>
หลังจากสร้างชุดฟีเจอร์ที่จําเป็นสําหรับแอปพลิเคชันแล้ว ระบบจะจัดเก็บรายการดังกล่าวภายในเป็นข้อมูลเมตาที่เชื่อมโยงกับ APK ของแอปพลิเคชันและเวอร์ชันของแอปพลิเคชัน
เมื่อผู้ใช้ค้นหาหรือเรียกดูแอปพลิเคชันโดยใช้แอปพลิเคชัน Google Play บริการจะเปรียบเทียบฟีเจอร์ที่จําเป็นสําหรับแต่ละแอปพลิเคชันกับฟีเจอร์ที่มีอยู่ในอุปกรณ์ของผู้ใช้ หากอุปกรณ์มีฟีเจอร์ที่จำเป็นทั้งหมดของแอปพลิเคชัน Google Play จะอนุญาตให้ผู้ใช้ดูแอปพลิเคชันและอาจดาวน์โหลดแอปพลิเคชันดังกล่าวได้
หากอุปกรณ์ไม่รองรับฟีเจอร์ที่จำเป็น Google Play จะกรองแอปพลิเคชันดังกล่าวไม่ให้ผู้ใช้เห็นหรือดาวน์โหลดได้
เนื่องจากฟีเจอร์ที่คุณประกาศใน<uses-feature>
องค์ประกอบส่งผลโดยตรงต่อวิธีที่ Google Play กรองแอปพลิเคชันของคุณ คุณจึงควรทำความเข้าใจวิธีที่ Google Play ประเมินไฟล์ Manifest ของแอปพลิเคชันและสร้างชุดฟีเจอร์ที่จำเป็น ส่วนต่อไปนี้มีข้อมูลเพิ่มเติม
การกรองตามฟีเจอร์ที่ประกาศไว้อย่างชัดเจน
ฟีเจอร์ที่ประกาศอย่างชัดเจนคือฟีเจอร์ที่แอปพลิเคชันประกาศไว้ในองค์ประกอบ
<uses-feature>
การประกาศฟีเจอร์อาจมีแอตทริบิวต์ android:required=["true" | "false"]
หากคุณคอมไพล์กับ API ระดับ 5 ขึ้นไป
ตัวเลือกนี้ช่วยให้คุณระบุได้ว่าแอปพลิเคชันต้องใช้ฟีเจอร์นี้และไม่สามารถทํางานได้อย่างถูกต้องหากไม่มีฟีเจอร์นี้ ("true"
) หรือใช้ฟีเจอร์นี้ (หากมี) แต่ออกแบบมาให้ทํางานได้โดยไม่ต้องใช้ฟีเจอร์นี้ ("false"
)
Google Play จะจัดการฟีเจอร์ที่ประกาศอย่างชัดแจ้งด้วยวิธีต่อไปนี้
- หากมีการประกาศอย่างชัดเจนว่าฟีเจอร์หนึ่งๆ เป็นฟีเจอร์ที่จำเป็น ดังที่แสดงในตัวอย่างต่อไปนี้ Google Play จะเพิ่มฟีเจอร์นั้นลงในรายการฟีเจอร์ที่จำเป็นสำหรับแอปพลิเคชัน จากนั้นจะกรองแอปพลิเคชันไม่ให้แสดงต่อผู้ใช้ในอุปกรณ์ที่ไม่มีฟีเจอร์ดังกล่าว
<uses-feature android:name="android.hardware.camera.any" android:required="true" />
- หากมีการประกาศอย่างชัดเจนว่าฟีเจอร์ไม่จำเป็น ดังที่แสดงในตัวอย่างต่อไปนี้ Google Play จะไม่เพิ่มฟีเจอร์นั้นลงในรายการฟีเจอร์ที่จำเป็น ด้วยเหตุนี้ ระบบจะไม่พิจารณาฟีเจอร์ที่ไม่จำเป็นซึ่งประกาศไว้อย่างชัดเจนเมื่อกรองแอปพลิเคชัน แม้ว่าอุปกรณ์จะไม่มีฟีเจอร์ที่ประกาศไว้ Google Play จะยังคงถือว่าแอปพลิเคชันเข้ากันได้กับอุปกรณ์และแสดงแอปพลิเคชันต่อผู้ใช้ เว้นแต่จะมีการใช้กฎการกรองอื่นๆ
<uses-feature android:name="android.hardware.camera" android:required="false" />
- หากมีการประกาศฟีเจอร์อย่างชัดแจ้งแต่ไม่มีแอตทริบิวต์
android:required
แสดงว่า Google Play จะถือว่าฟีเจอร์นั้นจำเป็นต้องมีและตั้งค่าการกรอง
โดยทั่วไป หากแอปพลิเคชันออกแบบมาเพื่อทำงานบน Android 1.6 และต่ำกว่า แอตทริบิวต์ android:required
จะไม่พร้อมใช้งานใน API และ Google Play จะถือว่าต้องมีการประกาศ <uses-feature>
ทั้งหมด
หมายเหตุ: การประกาศฟีเจอร์อย่างชัดเจนและใส่แอตทริบิวต์ android:required="false"
จะช่วยให้คุณปิดใช้การกรองทั้งหมดใน Google Play สำหรับฟีเจอร์ที่ระบุได้อย่างมีประสิทธิภาพ
กรองตามฟีเจอร์โดยนัย
ฟีเจอร์ที่ระบุไว้โดยนัยคือฟีเจอร์ที่แอปพลิเคชันต้องใช้เพื่อให้ทำงานได้อย่างถูกต้อง แต่ไม่ได้ประกาศไว้ในองค์ประกอบ <uses-feature>
ในไฟล์ Manifest ในทางเทคนิคแล้ว แอปพลิเคชันทุกแอปควรประกาศฟีเจอร์ทั้งหมดที่ใช้หรือจําเป็นเสมอ และหากไม่มีการประกาศฟีเจอร์ที่แอปพลิเคชันใช้ ระบบจะถือว่ามีข้อผิดพลาด
อย่างไรก็ตาม Google Play จะมองหาฟีเจอร์ที่นัยในแต่ละแอปพลิเคชันและตั้งค่าตัวกรองสำหรับฟีเจอร์เหล่านั้นเพื่อปกป้องผู้ใช้และนักพัฒนาแอป เช่นเดียวกับที่ดำเนินการกับฟีเจอร์ที่ประกาศไว้อย่างชัดเจน
แอปพลิเคชันอาจต้องใช้ฟีเจอร์หนึ่งๆ แต่ไม่ได้ประกาศฟีเจอร์นั้นด้วยเหตุผลต่อไปนี้
- แอปพลิเคชันได้รับการคอมไพล์กับไลบรารี Android เวอร์ชันเก่า (Android 1.5 หรือเก่ากว่า) ซึ่งไม่มีองค์ประกอบ
<uses-feature>
- นักพัฒนาแอปเข้าใจผิดว่าฟีเจอร์นี้มีอยู่ในอุปกรณ์ทุกเครื่องและไม่จำเป็นต้องประกาศ
- นักพัฒนาแอปไม่ได้ประกาศฟีเจอร์โดยไม่ตั้งใจ
- นักพัฒนาแอปประกาศฟีเจอร์อย่างชัดเจน แต่ประกาศไม่ถูกต้อง เช่น ข้อผิดพลาดในการสะกดคำในชื่อองค์ประกอบ
<uses-feature>
หรือค่าสตริงที่ไม่รู้จักสำหรับแอตทริบิวต์android:name
จะทําให้ประกาศฟีเจอร์เป็นโมฆะ
Google Play จะพยายามค้นหาข้อกำหนดฟีเจอร์โดยนัยของแอปพลิเคชันโดยตรวจสอบองค์ประกอบอื่นๆ ที่ประกาศไว้ในไฟล์ Manifest โดยเฉพาะองค์ประกอบ <uses-permission>
หากแอปพลิเคชันขอสิทธิ์ที่เกี่ยวข้องกับฮาร์ดแวร์ Google Play จะถือว่าแอปพลิเคชันใช้ฟีเจอร์ฮาร์ดแวร์ที่เกี่ยวข้อง จึงต้องใช้ฟีเจอร์เหล่านั้น แม้ว่าจะไม่มีประกาศ <uses-feature>
ที่เกี่ยวข้องก็ตาม สําหรับสิทธิ์ดังกล่าว Google Play จะเพิ่มฟีเจอร์ฮาร์ดแวร์ที่เกี่ยวข้องลงในข้อมูลเมตาที่เก็บไว้สําหรับแอปพลิเคชันและตั้งค่าตัวกรองสําหรับฟีเจอร์เหล่านั้น
เช่น หากแอปพลิเคชันขอสิทธิ์ CAMERA
Google Play จะถือว่าแอปพลิเคชันต้องใช้กล้องหลัง (หันออกสู่ภายนอก) แม้ว่าแอปจะไม่ได้ประกาศองค์ประกอบ <uses-feature>
สำหรับ android.hardware.camera
ก็ตาม ด้วยเหตุนี้ Google Play จึงกรองอุปกรณ์ที่ไม่มีกล้องหลังออก
หากไม่ต้องการให้ Google Play กรองตามฟีเจอร์ที่สื่อเป็นนัยที่เฉพาะเจาะจง ให้ประกาศฟีเจอร์นั้นอย่างชัดเจนในองค์ประกอบ <uses-feature>
และใส่แอตทริบิวต์ android:required="false"
ตัวอย่างเช่น หากต้องการปิดใช้การกรองที่เกิดจากสิทธิ์ CAMERA
ให้ประกาศฟีเจอร์ต่อไปนี้
<uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
ข้อควรระวัง: สิทธิ์ที่คุณขอในองค์ประกอบ <uses-permission>
อาจส่งผลต่อวิธีที่ Google Play กรองแอปพลิเคชันของคุณโดยตรง ส่วนสิทธิ์ที่บ่งบอกถึงข้อกำหนดของฟีเจอร์จะแสดงชุดสิทธิ์ทั้งหมดที่บ่งบอกถึงข้อกำหนดของฟีเจอร์และทริกเกอร์การกรอง
การจัดการพิเศษสำหรับฟีเจอร์บลูทูธ
Google Play ใช้กฎที่แตกต่างจากที่อธิบายไว้ในตัวอย่างก่อนหน้านี้เล็กน้อยเมื่อพิจารณาการกรองสำหรับบลูทูธ
หากแอปพลิเคชันประกาศสิทธิ์บลูทูธในองค์ประกอบ <uses-permission>
แต่ไม่ได้ประกาศฟีเจอร์บลูทูธอย่างชัดเจนในองค์ประกอบ <uses-feature>
ทาง Google Play จะตรวจสอบเวอร์ชันของแพลตฟอร์ม Android ที่แอปพลิเคชันออกแบบมาให้ทำงานตามที่ระบุไว้ในองค์ประกอบ <uses-sdk>
ดังที่แสดงในตารางต่อไปนี้ Google Play จะเปิดใช้การกรองสำหรับฟีเจอร์บลูทูธก็ต่อเมื่อแอปพลิเคชันประกาศแพลตฟอร์มที่ต่ำที่สุดหรือเป้าหมายเป็น Android 2.0 (API ระดับ 5) ขึ้นไปเท่านั้น อย่างไรก็ตาม โปรดทราบว่า Google Play จะใช้กฎปกติสำหรับการกรองเมื่อแอปพลิเคชันประกาศฟีเจอร์บลูทูธอย่างชัดเจนในองค์ประกอบ <uses-feature>
ตารางที่ 1 วิธีที่ Google Play กำหนดข้อกำหนดฟีเจอร์บลูทูธสำหรับแอปพลิเคชันที่ขอสิทธิ์บลูทูธแต่ไม่ประกาศฟีเจอร์บลูทูธในองค์ประกอบ <uses-feature>
minSdkVersion is ... |
targetSdkVersion คือ |
ผลลัพธ์ |
---|---|---|
<uses-sdk> |
<=4 | Google Play ไม่ได้กรองแอปพลิเคชันออกจากอุปกรณ์ใดๆ โดยอิงตามการรองรับฟีเจอร์ android.hardware.bluetooth ที่รายงานไว้ |
<=4 | >=5 | Google Play จะกรองแอปพลิเคชันออกจากอุปกรณ์ที่ไม่รองรับฟีเจอร์ android.hardware.bluetooth (รวมถึงรุ่นเก่าๆ) |
>=5 | >=5 |
ตัวอย่างต่อไปนี้แสดงผลลัพธ์การกรองที่แตกต่างกันตามวิธีที่ Google Play จัดการฟีเจอร์บลูทูธ
-
ในตัวอย่างนี้ แอปพลิเคชันที่ออกแบบมาให้ทำงานกับ API เวอร์ชันเก่าจะประกาศสิทธิ์บลูทูธ แต่ไม่ประกาศฟีเจอร์บลูทูธในองค์ประกอบ
- ผลลัพธ์: Google Play ไม่ได้กรองแอปพลิเคชันจากอุปกรณ์ใดเลย
<uses-feature>
<manifest ...> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-sdk android:minSdkVersion="3" /> ... </manifest>
-
ในตัวอย่างนี้ที่ 2 แอปพลิเคชันเดียวกันยังประกาศระดับ API เป้าหมายเป็น "5" ด้วย
- ผลลัพธ์: ตอนนี้ Google Play จะถือว่าจำเป็นต้องใช้ฟีเจอร์นี้และกรองแอปพลิเคชันออกจากอุปกรณ์ทั้งหมดที่ไม่ได้รายงานการรองรับบลูทูธ รวมถึงอุปกรณ์ที่ใช้แพลตฟอร์มเวอร์ชันเก่า
<manifest ...> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" /> ... </manifest>
-
ตอนนี้แอปพลิเคชันเดียวกันนี้ประกาศฟีเจอร์บลูทูธโดยเฉพาะ
- ผลลัพธ์: เหมือนกับตัวอย่างก่อนหน้าคือมีการใช้การกรอง
<manifest ...> <uses-feature android:name="android.hardware.bluetooth" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" /> ... </manifest>
-
สุดท้าย ในกรณีต่อไปนี้ แอปพลิเคชันเดียวกันจะเพิ่มแอตทริบิวต์
- ผลลัพธ์: Google Play ปิดใช้การกรองตามการรองรับฟีเจอร์บลูทูธสำหรับอุปกรณ์ทั้งหมด
android:required="false"
<manifest ...> <uses-feature android:name="android.hardware.bluetooth" android:required="false" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" /> ... </manifest>
ทดสอบฟีเจอร์ที่แอปพลิเคชันต้องการ
คุณสามารถใช้เครื่องมือ aapt2
ซึ่งมีอยู่ใน Android SDK เพื่อดูว่า Google Play จะกรองแอปพลิเคชันของคุณอย่างไรตามฟีเจอร์และสิทธิ์ที่ประกาศ โดยเรียกใช้ aapt2
กับคำสั่ง dump
badging
ซึ่งจะทำให้ aapt2
แยกวิเคราะห์ไฟล์ Manifest ของแอปพลิเคชันและใช้กฎเดียวกันกับที่ Google Play ใช้เพื่อระบุฟีเจอร์ที่แอปพลิเคชันต้องการ
หากต้องการใช้เครื่องมือนี้ ให้ทำตามขั้นตอนต่อไปนี้
- สร้างและส่งออกแอปพลิเคชันเป็น APK ที่ไม่ได้ลงนาม
หากคุณพัฒนาแอปใน Android Studio ให้สร้างแอปพลิเคชันด้วย Gradle ดังนี้
- เปิดโปรเจ็กต์แล้วเลือกเรียกใช้ > แก้ไขการกําหนดค่า
- เลือกเครื่องหมายบวกใกล้กับมุมซ้ายบนของหน้าต่างการเรียกใช้/แก้ไขข้อบกพร่อง การกําหนดค่า
- เลือก Gradle
- ป้อน "APK ที่ไม่ได้เซ็นชื่อ" ในชื่อ
- เลือกโมดูลจากส่วนโปรเจ็กต์ Gradle
- ป้อน "assemble" ใน Tasks
- เลือกตกลงเพื่อกำหนดค่าใหม่ให้เสร็จสมบูรณ์
- ตรวจสอบว่าได้เลือกการกำหนดค่าการเรียกใช้ Unsigned APK ในแถบเครื่องมือ แล้วเลือกเรียกใช้ > เรียกใช้ "Unsigned APK"
<ProjectName>/app/build/outputs/apk/
- ค้นหาเครื่องมือ
aapt2
หากยังไม่ได้อยู่ใน PATH หากใช้ SDK Tools r8 ขึ้นไป คุณจะเห็นaapt2
ในไดเรกทอรี<SDK>/build-tools/<tools version number>
หมายเหตุ: คุณต้องใช้
aapt2
เวอร์ชันที่ระบุไว้สำหรับคอมโพเนนต์ Build-Tools เวอร์ชันล่าสุดที่มี หากไม่มีคอมโพเนนต์ Build-Tools เวอร์ชันล่าสุด ให้ดาวน์โหลดโดยใช้ Android SDK Manager - เรียกใช้
aapt2
โดยใช้ไวยากรณ์นี้
$ aapt2 dump badging <path_to_exported_.apk>
ตัวอย่างเอาต์พุตคำสั่งสำหรับตัวอย่างบลูทูธที่ 2 ที่แสดงก่อนหน้านี้มีดังนี้
$ ./aapt2 dump badging BTExample.apk package: name='com.example.android.btexample' versionCode='' versionName='' uses-permission:'android.permission.BLUETOOTH_ADMIN' uses-feature:'android.hardware.bluetooth' sdkVersion:'3' targetSdkVersion:'5' application: label='BT Example' icon='res/drawable/app_bt_ex.png' launchable activity name='com.example.android.btexample.MyActivity'label='' icon='' uses-feature:'android.hardware.touchscreen' main supports-screens: 'small' 'normal' 'large' locales: '--_--' densities: '160'
ข้อมูลอ้างอิงฟีเจอร์
ส่วนต่อไปนี้ให้ข้อมูลอ้างอิงเกี่ยวกับฟีเจอร์ฮาร์ดแวร์ ฟีเจอร์ซอฟต์แวร์ และชุดสิทธิ์ที่บ่งบอกถึงข้อกำหนดของฟีเจอร์ที่เฉพาะเจาะจง
ฟีเจอร์ฮาร์ดแวร์
ส่วนนี้จะแสดงฟีเจอร์ฮาร์ดแวร์ที่แพลตฟอร์มเวอร์ชันล่าสุดรองรับ หากต้องการระบุว่าแอปใช้หรือต้องใช้ฟีเจอร์ฮาร์ดแวร์ ให้ประกาศค่าที่เกี่ยวข้องโดยขึ้นต้นด้วย "android.hardware"
ในแอตทริบิวต์ android:name
ทุกครั้งที่คุณประกาศฟีเจอร์ฮาร์ดแวร์ ให้ใช้องค์ประกอบ <uses-feature>
แยกต่างหาก
ฟีเจอร์ฮาร์ดแวร์เสียง
-
android.hardware.audio.low_latency
- แอปใช้ไปป์ไลน์เสียงที่มีเวลาในการตอบสนองต่ำของอุปกรณ์ ซึ่งจะช่วยลดการหน่วงเวลาและความล่าช้าเมื่อประมวลผลอินพุตหรือเอาต์พุตเสียง
-
android.hardware.audio.output
- แอปส่งเสียงโดยใช้ลำโพง แจ็คเสียง ความสามารถในการสตรีมบลูทูธ หรือกลไกที่คล้ายกันของอุปกรณ์
-
android.hardware.audio.pro
- แอปใช้ฟังก์ชันการทำงานและประสิทธิภาพเสียงระดับสูงของอุปกรณ์
-
android.hardware.microphone
- แอปบันทึกเสียงโดยใช้ไมโครโฟนของอุปกรณ์
ฟีเจอร์ฮาร์ดแวร์บลูทูธ
-
android.hardware.bluetooth
- แอปใช้ฟีเจอร์บลูทูธของอุปกรณ์ ซึ่งปกติแล้วจะใช้เพื่อสื่อสารกับอุปกรณ์อื่นๆ ที่เปิดใช้บลูทูธ
-
android.hardware.bluetooth_le
- แอปใช้ฟีเจอร์วิทยุบลูทูธพลังงานต่ำของอุปกรณ์
ฟีเจอร์ฮาร์ดแวร์ของกล้อง
หมายเหตุ: หากต้องการป้องกันไม่ให้ Google Play กรองแอปของคุณโดยไม่จำเป็น ให้เพิ่ม android:required="false"
ลงในฟีเจอร์กล้องที่แอปของคุณทำงานได้โดยไม่ต้องใช้ฟีเจอร์นั้น มิเช่นนั้น Google Play จะถือว่าฟีเจอร์ดังกล่าวเป็นฟีเจอร์ที่จำเป็นและป้องกันไม่ให้อุปกรณ์ที่ไม่รองรับฟีเจอร์ดังกล่าวเข้าถึงแอปของคุณ
การรองรับหน้าจอขนาดใหญ่
อุปกรณ์หน้าจอขนาดใหญ่บางรุ่นไม่รองรับฟีเจอร์กล้องบางรายการ โดยปกติแล้ว Chromebook จะไม่มีกล้องหลัง (หันออกด้านนอก) โฟกัสอัตโนมัติ หรือแฟลช แต่ Chromebook มีกล้องหน้า (หันหน้าเข้าหาผู้ใช้) และมักเชื่อมต่อกับกล้องภายนอก
หากต้องการรองรับกล้องพื้นฐานและทำให้แอปพร้อมให้บริการในอุปกรณ์จำนวนมากที่สุด ให้เพิ่มการตั้งค่าฟีเจอร์กล้องต่อไปนี้ลงในไฟล์ Manifest ของแอป
<uses-feature android:name="android.hardware.camera.any" android:required="false" /> <uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> <uses-feature android:name="android.hardware.camera.flash" android:required="false" />
ปรับการตั้งค่าฟีเจอร์เพื่อรองรับ Use Case ของแอป แต่หากต้องการให้แอปพร้อมให้บริการในอุปกรณ์จำนวนมากที่สุด ให้ใส่แอตทริบิวต์ required
เสมอเพื่อระบุอย่างชัดเจนว่าฟีเจอร์ใดเป็นฟีเจอร์ที่ต้องมี
รายการฟีเจอร์
-
android.hardware.camera.any
-
แอปใช้กล้องของอุปกรณ์หรือกล้องภายนอกที่เชื่อมต่อกับอุปกรณ์ ใช้ฟีเจอร์นี้แทน
android.hardware.camera
หรือandroid.hardware.camera.front
หากแอปของคุณไม่กำหนดให้กล้องหันไปทางด้านหลัง (โลก) หรือด้านหน้า (ผู้ใช้) ตามลำดับสิทธิ์
CAMERA
หมายความว่าแอปของคุณใช้android.hardware.camera
ด้วย กล้องหลังเป็นฟีเจอร์ที่ต้องระบุ เว้นแต่จะมีการประกาศandroid.hardware.camera
ด้วยandroid:required="false"
-
android.hardware.camera
-
แอปใช้กล้องหลัง (หันออกด้านนอก) ของอุปกรณ์
ข้อควรระวัง: อุปกรณ์อย่าง Chromebook ที่มีกล้องหน้า (หันเข้าหาผู้ใช้) เท่านั้นจะไม่รองรับฟีเจอร์นี้ ใช้
android.hardware.camera.any
หากแอปใช้กล้องได้ทุกตัว ไม่ว่าจะหันกล้องไปทางไหนก็ตามหมายเหตุ: สิทธิ์
CAMERA
บ่งบอกว่ากล้องหลังเป็นฟีเจอร์ที่จำเป็น เพื่อช่วยในการกรองที่เหมาะสมใน Google Play เมื่อไฟล์ Manifest ของแอปมีสิทธิ์CAMERA
ให้ระบุอย่างชัดเจนว่าแอปของคุณใช้ฟีเจอร์camera
และระบุว่าจำเป็นต้องใช้ฟีเจอร์ดังกล่าวหรือไม่ เช่น
<uses-feature android:name="android.hardware.camera" android:required="false" />
-
android.hardware.camera.front
-
แอปใช้กล้องหน้า (หันเข้าหาผู้ใช้) ของอุปกรณ์
สิทธิ์
CAMERA
หมายความว่าแอปของคุณใช้android.hardware.camera
ด้วย กล้องหลังเป็นฟีเจอร์ที่ต้องระบุ เว้นแต่จะมีการประกาศandroid.hardware.camera
ด้วยandroid:required="false"
ข้อควรระวัง: หากแอปใช้
android.hardware.camera.front
แต่ไม่ได้ประกาศandroid.hardware.camera
อย่างชัดเจนด้วยandroid.required="false"
อุปกรณ์ที่ไม่มีกล้องหลัง (เช่น Chromebook) จะได้รับการกรองโดย Google Play หากแอปรองรับอุปกรณ์ที่มีเฉพาะกล้องหน้า ให้ประกาศandroid.hardware.camera
ด้วยandroid.required="false"
เพื่อป้องกันไม่ให้กรองโดยไม่จำเป็น -
android.hardware.camera.external
-
แอปสื่อสารกับกล้องภายนอกที่ผู้ใช้เชื่อมต่อกับอุปกรณ์ ฟีเจอร์นี้ไม่ได้รับประกันว่ากล้องภายนอกจะพร้อมให้แอปของคุณใช้งาน
สิทธิ์
CAMERA
หมายความว่าแอปของคุณใช้android.hardware.camera
ด้วย กล้องหลังเป็นฟีเจอร์ที่ต้องระบุ เว้นแต่จะมีการประกาศandroid.hardware.camera
ด้วยandroid:required="false"
-
android.hardware.camera.autofocus
-
แอปใช้ฟีเจอร์โฟกัสอัตโนมัติที่กล้องของอุปกรณ์รองรับ
หมายเหตุ: สิทธิ์
CAMERA
หมายความว่าโฟกัสอัตโนมัติเป็นฟีเจอร์ที่จำเป็น เพื่อช่วยในการกรองที่เหมาะสมใน Google Play เมื่อไฟล์ Manifest ของแอปมีสิทธิ์CAMERA
ให้ระบุอย่างชัดเจนว่าแอปของคุณใช้ฟีเจอร์โฟกัสอัตโนมัติและระบุว่าจำเป็นต้องใช้ฟีเจอร์ดังกล่าวหรือไม่ เช่น
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
-
android.hardware.camera.flash
-
แอปจะใช้ฟีเจอร์แฟลชที่กล้องของอุปกรณ์รองรับ
-
android.hardware.camera.capability.manual_post_processing
-
แอปใช้ฟีเจอร์
MANUAL_POST_PROCESSING
ที่กล้องของอุปกรณ์รองรับฟีเจอร์นี้ช่วยให้แอปของคุณลบล้างฟังก์ชันการทำงานปรับสมดุลแสงสีขาวอัตโนมัติของกล้องได้ ใช้
android.colorCorrection.transform
,android.colorCorrection.gains
และandroid.colorCorrection.mode
ของTRANSFORM_MATRIX
-
android.hardware.camera.capability.manual_sensor
-
แอปใช้ฟีเจอร์
MANUAL_SENSOR
ที่กล้องของอุปกรณ์รองรับฟีเจอร์นี้แสดงถึงการรองรับการล็อกการเปิดรับแสงอัตโนมัติ (
android.control.aeLock
) ซึ่งช่วยให้เวลาการเปิดรับแสงและความไวแสงของกล้องคงที่ตามค่าที่ระบุ -
android.hardware.camera.capability.raw
-
แอปใช้ฟีเจอร์
RAW
ที่กล้องของอุปกรณ์รองรับฟีเจอร์นี้หมายความว่าอุปกรณ์สามารถบันทึกไฟล์ DNG (RAW) ได้ กล้องของอุปกรณ์จะระบุข้อมูลเมตาที่เกี่ยวข้องกับ DNG ซึ่งจำเป็นสำหรับแอปของคุณในการประมวลผลรูปภาพ RAW โดยตรง
-
android.hardware.camera.level.full
-
แอปใช้การรองรับการจับภาพระดับ
FULL
ที่กล้องของอุปกรณ์อย่างน้อย 1 ตัวมีให้ การรองรับFULL
ประกอบด้วยความสามารถในการถ่ายภาพแบบต่อเนื่อง การควบคุมต่อเฟรม และการควบคุมหลังการประมวลผลด้วยตนเอง โปรดดูINFO_SUPPORTED_HARDWARE_LEVEL_FULL
ฟีเจอร์ฮาร์ดแวร์ของ UI ของอุปกรณ์
-
android.hardware.type.automotive
-
แอปออกแบบมาเพื่อแสดง UI บนชุดหน้าจอภายในยานพาหนะ ผู้ใช้โต้ตอบกับแอปโดยใช้ปุ่มกด การควบคุมด้วยการสัมผัส ตัวควบคุมแบบหมุน และอินเทอร์เฟซที่คล้ายกับเมาส์ โดยปกติแล้วหน้าจอของยานพาหนะจะปรากฏในคอนโซลกลางหรือหน้าปัดของยานพาหนะ
หมายเหตุ: ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานฟีเจอร์นี้และคำแนะนำในการสร้างแอปสำหรับรถยนต์ได้ที่หัวข้อเผยแพร่ไปยังรถยนต์
-
android.hardware.type.television
-
(เลิกใช้งานแล้ว ให้ใช้
android.software.leanback
แทน)แอปออกแบบมาเพื่อแสดง UI บนทีวี ฟีเจอร์นี้กำหนดว่า "โทรทัศน์" หมายถึงประสบการณ์การใช้งานโทรทัศน์ในห้องนั่งเล่นทั่วไป ซึ่งก็คือแอปที่แสดงบนหน้าจอขนาดใหญ่ ผู้ใช้นั่งอยู่ไกลๆ และรูปแบบการป้อนข้อมูลหลักคือปุ่มบังคับทิศทาง (D-pad) ไม่ใช่เมาส์ เคอร์เซอร์ หรืออุปกรณ์สัมผัส
-
android.hardware.type.watch
- แอปออกแบบมาเพื่อแสดง UI บนนาฬิกา นาฬิกาสวมใส่บนร่างกาย เช่น ข้อมือ ผู้ใช้อยู่ใกล้กับอุปกรณ์มากขณะโต้ตอบกับอุปกรณ์
-
android.hardware.type.pc
-
แอปนี้ออกแบบมาเพื่อแสดง UI บน Chromebook ฟีเจอร์นี้จะปิดใช้การจําลองอินพุตสําหรับเมาส์และทัชแพด เนื่องจาก Chromebook ใช้ฮาร์ดแวร์เมาส์และทัชแพด ดูการป้อนข้อมูลด้วยเมาส์
หมายเหตุ: ตั้งค่าเป็น
required="false"
สำหรับองค์ประกอบนี้ ไม่เช่นนั้น Google Play Store จะทำให้แอปของคุณไม่พร้อมให้บริการในอุปกรณ์ที่ไม่ใช่ Chromebook
ฟีเจอร์ฮาร์ดแวร์ลายนิ้วมือ
-
android.hardware.fingerprint
- แอปจะอ่านลายนิ้วมือโดยใช้ฮาร์ดแวร์ข้อมูลไบโอเมตริกของอุปกรณ์
ฟีเจอร์ฮาร์ดแวร์ของเกมแพด
-
android.hardware.gamepad
- แอปจะบันทึกอินพุตของเกมคอนโทรลเลอร์จากตัวอุปกรณ์เองหรือจากเกมแพดที่เชื่อมต่อ
ฟีเจอร์ฮาร์ดแวร์อินฟราเรด
-
android.hardware.consumerir
- แอปใช้ความสามารถอินฟราเรด (IR) ของอุปกรณ์ โดยปกติแล้วเพื่อสื่อสารกับอุปกรณ์ IR อื่นๆ ของผู้บริโภค
ฟีเจอร์ฮาร์ดแวร์ตำแหน่ง
-
android.hardware.location
- แอปใช้ฟีเจอร์อย่างน้อย 1 รายการในอุปกรณ์เพื่อระบุตำแหน่ง เช่น ตำแหน่ง GPS, ตำแหน่งเครือข่าย หรือตำแหน่งของเซลล์
-
android.hardware.location.gps
-
แอปใช้พิกัดตำแหน่งที่แน่นอนซึ่งได้จากเครื่องรับสัญญาณระบบกำหนดตำแหน่งทั่วโลก (GPS) ในอุปกรณ์
การใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์
android.hardware.location
ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วยแอตทริบิวต์android:required="false"
-
android.hardware.location.network
-
แอปใช้พิกัดตำแหน่งคร่าวๆ ที่ได้รับจากระบบระบุตำแหน่งทางภูมิศาสตร์ที่อิงตามเครือข่ายซึ่งอุปกรณ์รองรับ
การใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์
android.hardware.location
ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วยแอตทริบิวต์android:required="false"
ฟีเจอร์ฮาร์ดแวร์ NFC
-
android.hardware.nfc
- แอปใช้ฟีเจอร์วิทยุ Near-Field Communication (NFC) ของอุปกรณ์
-
android.hardware.nfc.hce
-
แอปใช้การจำลองบัตร NFC ที่โฮสต์ในอุปกรณ์
ฟีเจอร์ฮาร์ดแวร์ OpenGL ES
-
android.hardware.opengles.aep
- แอปใช้ OpenGL ES Android Extension Pack ที่ติดตั้งในอุปกรณ์
ฟีเจอร์ฮาร์ดแวร์ของเซ็นเซอร์
-
android.hardware.sensor.accelerometer
- แอปใช้ค่าที่อ่านได้จากการเคลื่อนไหวจากเครื่องวัดความเร่งของอุปกรณ์เพื่อตรวจหาการวางแนวปัจจุบันของอุปกรณ์ เช่น แอปอาจใช้ค่าที่อ่านได้จากตัวตรวจวัดความเร่งเพื่อกำหนดเวลาสลับระหว่างการวางแนวแนวตั้งและแนวนอน
-
android.hardware.sensor.ambient_temperature
- แอปใช้เซ็นเซอร์อุณหภูมิรอบข้าง (สภาพแวดล้อม) ของอุปกรณ์ เช่น แอปสภาพอากาศสามารถรายงานอุณหภูมิในอาคารหรือกลางแจ้ง
-
android.hardware.sensor.barometer
- แอปใช้บารอมิเตอร์ของอุปกรณ์ เช่น แอปสภาพอากาศอาจรายงานความดันอากาศ
-
android.hardware.sensor.compass
- แอปใช้เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็ก (เข็มทิศ) ของอุปกรณ์ เช่น แอปการนำทางอาจแสดงทิศทางปัจจุบันที่ผู้ใช้หันหน้าไป
-
android.hardware.sensor.gyroscope
- แอปใช้ไจโรสโคปของอุปกรณ์เพื่อตรวจจับการหมุนและการบิด ซึ่งจะสร้างระบบการวางแนว 6 แกน การใช้เซ็นเซอร์นี้ช่วยให้แอปตรวจจับได้อย่างราบรื่นยิ่งขึ้นเมื่อต้องสลับระหว่างการวางแนวตั้งกับแนวนอน
-
android.hardware.sensor.hifi_sensors
- แอปใช้เซ็นเซอร์ความเที่ยงตรงสูง (Hi-Fi) ของอุปกรณ์ เช่น แอปเล่นเกมอาจตรวจจับการเคลื่อนไหวที่แม่นยำสูงของผู้ใช้
-
android.hardware.sensor.heartrate
- แอปใช้เครื่องวัดอัตราการเต้นของหัวใจของอุปกรณ์ เช่น แอปฟิตเนสอาจรายงานแนวโน้มอัตราการเต้นของหัวใจของผู้ใช้เมื่อเวลาผ่านไป
-
android.hardware.sensor.heartrate.ecg
- แอปใช้เซ็นเซอร์วัดอัตราการเต้นของหัวใจแบบคลื่นไฟฟ้าหัวใจ (ECG) ของอุปกรณ์ เช่น แอปฟิตเนสอาจรายงานข้อมูลอัตราการเต้นของหัวใจของผู้ใช้อย่างละเอียดยิ่งขึ้น
-
android.hardware.sensor.light
- แอปใช้เซ็นเซอร์แสงของอุปกรณ์ เช่น แอปอาจแสดงรูปแบบสี 1 ใน 2 แบบตามสภาพแสงโดยรอบ
-
android.hardware.sensor.proximity
- แอปใช้พร็อกซิมิตีเซ็นเซอร์ของอุปกรณ์ เช่น แอปโทรศัพท์อาจปิดหน้าจอของอุปกรณ์เมื่อแอปตรวจพบว่าผู้ใช้ถืออุปกรณ์ไว้ใกล้กับร่างกาย
-
android.hardware.sensor.relative_humidity
- แอปใช้เซ็นเซอร์ความชื้นสัมพัทธ์ของอุปกรณ์ เช่น แอปสภาพอากาศอาจใช้ความชื้นเพื่อคํานวณและรายงานจุดน้ำค้างปัจจุบัน
-
android.hardware.sensor.stepcounter
- แอปใช้เครื่องนับก้าวของอุปกรณ์ เช่น แอปฟิตเนสอาจรายงานจํานวนก้าวที่ผู้ใช้ต้องเดินเพื่อให้บรรลุเป้าหมายจํานวนก้าวรายวัน
-
android.hardware.sensor.stepdetector
- แอปใช้เครื่องตรวจจับจำนวนก้าวของอุปกรณ์ เช่น แอปฟิตเนสอาจใช้ช่วงเวลาระหว่างการก้าวเพื่ออนุมานประเภทการออกกำลังกายที่ผู้ใช้กําลังทําอยู่
ฟีเจอร์ฮาร์ดแวร์ของหน้าจอ
-
android.hardware.screen.landscape
-
android.hardware.screen.portrait
-
แอปกำหนดให้อุปกรณ์ใช้การวางแนวตั้งหรือแนวนอน หากแอปรองรับทั้ง 2 การวางแนว คุณไม่จําเป็นต้องประกาศฟีเจอร์ใดฟีเจอร์หนึ่ง
เช่น หากแอปของคุณต้องใช้การวางแนวแนวตั้ง ให้ประกาศฟีเจอร์ต่อไปนี้เพื่อให้เฉพาะอุปกรณ์ที่รองรับการวางแนวแนวตั้งเท่านั้น (ไม่ว่าจะรองรับเสมอหรือตามตัวเลือกของผู้ใช้) ที่เรียกใช้แอปได้
<uses-feature android:name="android.hardware.screen.portrait" />
ระบบจะถือว่าไม่จำเป็นต้องใช้การวางแนวทั้ง 2 แบบโดยค่าเริ่มต้น เพื่อให้แอปของคุณติดตั้งในอุปกรณ์ที่รองรับการวางแนวอย่างน้อย 1 แบบหรือทั้ง 2 แบบได้ อย่างไรก็ตาม หากกิจกรรมใดขอให้ทำงานในแนวการวางแนวที่เจาะจงโดยใช้แอตทริบิวต์
android:screenOrientation
การประกาศนี้จะบอกเป็นนัยว่าแอปของคุณต้องใช้แนวการวางแนวนั้นตัวอย่างเช่น หากคุณประกาศ
android:screenOrientation
ด้วย"landscape"
,"reverseLandscape"
หรือ"sensorLandscape"
แอปของคุณจะพร้อมใช้งานในอุปกรณ์ที่รองรับการวางแนวนอนเท่านั้นแนวทางปฏิบัติแนะนำคือประกาศข้อกำหนดสำหรับการวางแนวนี้โดยใช้องค์ประกอบ
<uses-feature>
หากคุณประกาศการวางแนวสําหรับกิจกรรมโดยใช้android:screenOrientation
แต่ไม่ได้กําหนดให้ใช้จริง คุณสามารถปิดใช้ข้อกําหนดได้โดยประกาศการวางแนวด้วยองค์ประกอบ<uses-feature>
และใส่android:required="false"
อุปกรณ์ที่ใช้ Android 3.1 (API ระดับ 12) หรือต่ำกว่าจะรองรับทั้งแนวนอนและแนวตั้งเพื่อใช้งานร่วมกันได้
ฟีเจอร์ฮาร์ดแวร์โทรศัพท์
-
android.hardware.telephony
- แอปใช้ฟีเจอร์โทรศัพท์ของอุปกรณ์ เช่น วิทยุโทรศัพท์ที่มีบริการการสื่อสารผ่านข้อมูล
-
android.hardware.telephony.cdma
-
แอปใช้ระบบวิทยุโทรศัพท์แบบ Code Division Multiple Access (CDMA)
การใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์
android.hardware.telephony
ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วยandroid:required="false"
-
android.hardware.telephony.gsm
-
แอปใช้ระบบวิทยุโทรศัพท์ Global System for Mobile Communications (GSM)
การใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์
android.hardware.telephony
ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วยandroid:required="false"
ฟีเจอร์ฮาร์ดแวร์หน้าจอสัมผัส
-
android.hardware.faketouch
-
แอปใช้เหตุการณ์การโต้ตอบด้วยการสัมผัสพื้นฐาน เช่น การแตะและการลาก
เมื่อประกาศเป็น "ต้องระบุ" ฟีเจอร์นี้จะระบุว่าแอปเข้ากันได้กับอุปกรณ์ก็ต่อเมื่ออุปกรณ์ดังกล่าวมีหน้าจอสัมผัส "การสัมผัสจำลอง" จำลองหรือมีหน้าจอสัมผัสจริงเท่านั้น
อุปกรณ์ที่มีอินเทอร์เฟซการสัมผัสจำลองมีระบบการป้อนข้อมูลของผู้ใช้ซึ่งจําลองความสามารถบางส่วนของหน้าจอสัมผัส เช่น เมาส์หรือรีโมตคอนโทรลอาจควบคุมเคอร์เซอร์บนหน้าจอ
หากแอปของคุณต้องใช้การโต้ตอบแบบชี้และคลิกพื้นฐานและไม่ทำงานด้วยตัวควบคุม D-pad เพียงอย่างเดียว ให้ประกาศฟีเจอร์นี้ เนื่องจากนี่เป็นระดับการโต้ตอบด้วยการสัมผัสขั้นต่ำ คุณจึงใช้แอปที่ประกาศฟีเจอร์นี้ในอุปกรณ์ที่มีอินเทอร์เฟซการสัมผัสที่ซับซ้อนมากขึ้นได้ด้วย
แอปต้องใช้ฟีเจอร์
android.hardware.faketouch
โดยค่าเริ่มต้น หากต้องการจำกัดแอปให้ใช้ได้เฉพาะกับอุปกรณ์ที่มีหน้าจอสัมผัสเท่านั้น คุณต้องประกาศอย่างชัดเจนว่าต้องใช้หน้าจอสัมผัส ดังนี้<uses-feature android:name="android.hardware.touchscreen" android:required="true" />
แอปทั้งหมดที่ไม่กำหนด
android.hardware.touchscreen
อย่างชัดเจน ดังที่แสดงในตัวอย่างต่อไปนี้ จะทำงานในอุปกรณ์ที่มีandroid.hardware.faketouch
ได้ด้วย<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
-
android.hardware.faketouch.multitouch.distinct
-
แอปติดตาม "นิ้ว" ที่แตกต่างกันอย่างน้อย 2 นิ้วบนอินเทอร์เฟซการสัมผัสจำลอง ฟีเจอร์นี้เป็นชุดที่รวมฟีเจอร์
android.hardware.faketouch
เมื่อประกาศเป็น "ต้องระบุ" ฟีเจอร์นี้จะระบุว่าแอปเข้ากันได้กับอุปกรณ์ก็ต่อเมื่ออุปกรณ์จำลองการติดตามนิ้วมืออย่างน้อย 2 นิ้วที่แตกต่างกันหรือมีหน้าจอสัมผัสจริงอุปกรณ์อินพุตที่รองรับมัลติทัชแบบแยกต่างหากด้วยอินเทอร์เฟซการสัมผัสจำลองจะไม่รองรับท่าทางสัมผัสด้วย 2 นิ้วบางท่าทาง ต่างจากมัลติทัชที่
android.hardware.touchscreen.multitouch.distinct
กำหนดไว้ เนื่องจากระบบจะเปลี่ยนอินพุตเป็นการเลื่อนเคอร์เซอร์บนหน้าจอ กล่าวคือ ท่าทางสัมผัสด้วยนิ้วเดียวในอุปกรณ์ดังกล่าวจะย้ายเคอร์เซอร์ การปัดด้วย 2 นิ้วจะทริกเกอร์เหตุการณ์การสัมผัสด้วย 1 นิ้ว และท่าทางสัมผัสด้วย 2 นิ้วอื่นๆ จะทริกเกอร์เหตุการณ์การสัมผัสด้วย 2 นิ้วที่เกี่ยวข้องอุปกรณ์ที่มีแทร็กแพดแบบใช้ 2 นิ้วเพื่อเลื่อนเคอร์เซอร์จะรองรับฟีเจอร์นี้
-
android.hardware.faketouch.multitouch.jazzhand
-
แอปติดตาม "นิ้ว" ที่ต่างกันอย่างน้อย 5 นิ้วบนอินเทอร์เฟซการสัมผัสจำลอง ฟีเจอร์นี้เป็นชุดที่รวมฟีเจอร์
android.hardware.faketouch
เมื่อประกาศเป็น "ต้องระบุ" ฟีเจอร์นี้จะระบุว่าแอปเข้ากันได้กับอุปกรณ์ก็ต่อเมื่ออุปกรณ์จำลองการติดตามนิ้วที่แตกต่างกันตั้งแต่ 5 นิ้วขึ้นไป หรือมีหน้าจอสัมผัสจริงอุปกรณ์อินพุตที่รองรับมัลติทัชแบบ Jazzhand ด้วยอินเทอร์เฟซการสัมผัสจำลองจะไม่รองรับท่าทางสัมผัสด้วย 5 นิ้วบางท่าทาง ต่างจากมัลติทัชที่
android.hardware.touchscreen.multitouch.jazzhand
กำหนดไว้ เนื่องจากระบบจะเปลี่ยนอินพุตเป็นการเคลื่อนที่ของเคอร์เซอร์บนหน้าจอ กล่าวคือ ท่าทางสัมผัสด้วยนิ้วเดียวในอุปกรณ์ดังกล่าวจะย้ายเคอร์เซอร์ ท่าทางสัมผัสด้วยหลายนิ้วจะทริกเกอร์เหตุการณ์การสัมผัสด้วยนิ้วเดียว และท่าทางสัมผัสด้วยหลายนิ้วอื่นๆ จะทริกเกอร์เหตุการณ์การสัมผัสด้วยหลายนิ้วที่เกี่ยวข้องอุปกรณ์ที่มีแทร็กแพดแบบสัมผัสด้วย 5 นิ้วสำหรับการเคลื่อนไหวเคอร์เซอร์จะรองรับฟีเจอร์นี้
-
android.hardware.touchscreen
-
แอปใช้ความสามารถของหน้าจอสัมผัสของอุปกรณ์สำหรับท่าทางสัมผัสที่โต้ตอบได้มากกว่าเหตุการณ์การสัมผัสพื้นฐาน เช่น การปัด ฟีเจอร์นี้เป็นฟีเจอร์ที่รวมฟีเจอร์
android.hardware.faketouch
ไว้ด้วยโดยค่าเริ่มต้น แอปทั้งหมดต้องใช้ฟีเจอร์นี้ จึงจะใช้กับอุปกรณ์ที่มีเพียงอินเทอร์เฟซ "การแตะจำลอง" เท่านั้นไม่ได้ คุณทำให้แอปพร้อมให้บริการในอุปกรณ์ที่มีอินเทอร์เฟซการสัมผัสจำลอง หรือแม้แต่ในอุปกรณ์ที่มีตัวควบคุม D-pad เท่านั้นได้โดยการประกาศอย่างชัดเจนว่าไม่จำเป็นต้องใช้หน้าจอสัมผัสโดยใช้
android.hardware.touchscreen
withandroid:required="false"
เพิ่มประกาศนี้หากแอปใช้อินเทอร์เฟซหน้าจอสัมผัสจริง แต่ไม่จำเป็นต้องใช้ แอปทั้งหมดที่ไม่กำหนดให้ต้องมีandroid.hardware.touchscreen
อย่างชัดแจ้งจะทำงานในอุปกรณ์ที่มีandroid.hardware.faketouch
ได้ด้วยหากแอปต้องใช้อินเทอร์เฟซการสัมผัส เช่น เพื่อทำท่าทางสัมผัสขั้นสูง เช่น การปัด คุณก็ไม่จําเป็นต้องประกาศฟีเจอร์อินเทอร์เฟซการสัมผัสใดๆ เนื่องจากระบบจะกำหนดให้ใช้โดยค่าเริ่มต้น อย่างไรก็ตาม เราขอแนะนำให้คุณประกาศฟีเจอร์ทั้งหมดที่แอปใช้อย่างชัดเจน
หากต้องการการโต้ตอบด้วยการสัมผัสที่ซับซ้อนมากขึ้น เช่น ท่าทางสัมผัสด้วยหลายนิ้ว ให้ประกาศว่าแอปของคุณใช้ฟีเจอร์หน้าจอสัมผัสขั้นสูง
-
android.hardware.touchscreen.multitouch
-
แอปใช้ความสามารถพื้นฐานของการสัมผัสแบบ 2 จุดของอุปกรณ์ เช่น ท่าทางสัมผัสด้วยการบีบนิ้ว แต่แอปไม่จำเป็นต้องติดตามการสัมผัสแยกต่างหาก ฟีเจอร์นี้เป็นชุดที่รวมฟีเจอร์
android.hardware.touchscreen
ไว้ด้วยการใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์
android.hardware.touchscreen
ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วยandroid:required="false"
-
android.hardware.touchscreen.multitouch.distinct
-
แอปใช้ความสามารถแบบมัลติทัชขั้นสูงของอุปกรณ์เพื่อติดตามจุดตั้งแต่ 2 จุดขึ้นไปอย่างอิสระ ฟีเจอร์นี้รวมฟีเจอร์
android.hardware.touchscreen.multitouch
ไว้ด้วยการใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์
android.hardware.touchscreen.multitouch
ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วยandroid:required="false"
-
android.hardware.touchscreen.multitouch.jazzhand
-
แอปใช้ความสามารถการสัมผัสหลายจุดขั้นสูงของอุปกรณ์เพื่อติดตามจุดอย่างน้อย 5 จุดแยกกัน ฟีเจอร์นี้รวมฟีเจอร์
android.hardware.touchscreen.multitouch
ไว้ด้วยการใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์
android.hardware.touchscreen.multitouch
ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วยandroid:required="false"
ฟีเจอร์ฮาร์ดแวร์ USB
-
android.hardware.usb.accessory
- แอปจะทํางานเหมือนอุปกรณ์ USB และเชื่อมต่อกับโฮสต์ USB
-
android.hardware.usb.host
- แอปใช้อุปกรณ์เสริม USB ที่เชื่อมต่อกับอุปกรณ์ อุปกรณ์ทำหน้าที่เป็นโฮสต์ USB
ฟีเจอร์ฮาร์ดแวร์ของ Vulkan
-
android.hardware.vulkan.compute
-
แอปใช้ฟีเจอร์การประมวลผลของ Vulkan ฟีเจอร์นี้บ่งบอกว่าแอปต้องใช้การใช้งาน Vulkan ที่เร่งด้วยฮาร์ดแวร์ เวอร์ชันฟีเจอร์จะระบุระดับของฟีเจอร์การประมวลผลที่ไม่บังคับที่แอปต้องใช้นอกเหนือจากข้อกำหนดของ Vulkan 1.0 ตัวอย่างเช่น หากแอปของคุณต้องใช้การรองรับ Vulkan Compute ระดับ 0 ให้ประกาศฟีเจอร์ต่อไปนี้
ดูรายละเอียดเพิ่มเติมเกี่ยวกับเวอร์ชันฟีเจอร์ได้ที่<uses-feature android:name="android.hardware.vulkan.compute" android:version="0" android:required="true" />
FEATURE_VULKAN_HARDWARE_COMPUTE
-
android.hardware.vulkan.level
-
แอปใช้ฟีเจอร์ระดับ Vulkan ฟีเจอร์นี้บ่งบอกว่าแอปต้องใช้การใช้งาน Vulkan ที่เร่งด้วยฮาร์ดแวร์ เวอร์ชันฟีเจอร์จะระบุระดับของฟีเจอร์ฮาร์ดแวร์ที่ไม่บังคับที่แอปต้องใช้ ตัวอย่างเช่น หากแอปของคุณต้องใช้การรองรับฮาร์ดแวร์ Vulkan ระดับ 0 ให้ประกาศฟีเจอร์ต่อไปนี้
ดูข้อมูลเพิ่มเติมเกี่ยวกับเวอร์ชันฟีเจอร์ได้ที่<uses-feature android:name="android.hardware.vulkan.level" android:version="0" android:required="true" />
FEATURE_VULKAN_HARDWARE_LEVEL
-
android.hardware.vulkan.version
-
แอปใช้ Vulkan ฟีเจอร์นี้บ่งบอกว่าแอปต้องใช้การใช้งาน Vulkan ที่เร่งด้วยฮาร์ดแวร์ เวอร์ชันฟีเจอร์จะระบุเวอร์ชันขั้นต่ำของ Vulkan API ที่แอปรองรับ ตัวอย่างเช่น หากแอปของคุณต้องใช้การรองรับ Vulkan 1.0 ให้ประกาศฟีเจอร์ต่อไปนี้
ดูรายละเอียดเพิ่มเติมเกี่ยวกับเวอร์ชันฟีเจอร์ได้ที่<uses-feature android:name="android.hardware.vulkan.version" android:version="0x400003" android:required="true" />
FEATURE_VULKAN_HARDWARE_VERSION
ฟีเจอร์ฮาร์ดแวร์ Wi-Fi
-
android.hardware.wifi
- แอปใช้ฟีเจอร์เครือข่าย 802.11 (Wi-Fi) ในอุปกรณ์
-
android.hardware.wifi.direct
- แอปใช้ฟีเจอร์เครือข่าย Wi-Fi Direct ในอุปกรณ์
ฟีเจอร์ของซอฟต์แวร์
ส่วนนี้จะแสดงฟีเจอร์ซอฟต์แวร์ที่แพลตฟอร์มเวอร์ชันล่าสุดรองรับ หากต้องการระบุว่าแอปใช้หรือต้องใช้ฟีเจอร์ซอฟต์แวร์ ให้ประกาศค่าที่เกี่ยวข้องโดยขึ้นต้นด้วย "android.software"
ในแอตทริบิวต์ android:name
ทุกครั้งที่คุณประกาศฟีเจอร์ซอฟต์แวร์ ให้ใช้องค์ประกอบ <uses-feature>
แยกต่างหาก
ฟีเจอร์ของซอฟต์แวร์การสื่อสาร
-
android.software.sip
- แอปใช้บริการ Session Initiation Protocol (SIP) การใช้ SIP จะทำให้แอปรองรับการดำเนินการทางโทรศัพท์ผ่านอินเทอร์เน็ต เช่น การประชุมทางวิดีโอและการรับส่งข้อความโต้ตอบแบบทันที
-
android.software.sip.voip
-
แอปใช้บริการ Voice Over Internet Protocol (VoIP) ที่ใช้ SIP การใช้ VoIP จะช่วยให้แอปรองรับการโทรผ่านอินเทอร์เน็ตแบบเรียลไทม์ เช่น การประชุมทางวิดีโอแบบ 2 ทาง
การใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์
android.software.sip
ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วยandroid:required="false"
-
android.software.webview
- แอปแสดงเนื้อหาจากอินเทอร์เน็ต
ฟีเจอร์ซอฟต์แวร์อินพุตที่กำหนดเอง
-
android.software.input_methods
-
แอปใช้วิธีการป้อนข้อมูลใหม่ซึ่งนักพัฒนาแอปกำหนดไว้ใน
InputMethodService
ฟีเจอร์ของซอฟต์แวร์การจัดการอุปกรณ์
-
android.software.backup
- แอปมีตรรกะในการจัดการการดำเนินการสำรองและกู้คืน
-
android.software.device_admin
- แอปใช้ผู้ดูแลระบบอุปกรณ์เพื่อบังคับใช้นโยบายด้านอุปกรณ์
-
android.software.managed_users
- แอปรองรับผู้ใช้รองและโปรไฟล์ที่มีการจัดการ
-
android.software.securely_removes_users
- แอปสามารถนําผู้ใช้และข้อมูลที่เกี่ยวข้องออกอย่างถาวร
-
android.software.verified_boot
- แอปมีตรรกะในการจัดการผลลัพธ์จากฟีเจอร์การบูตที่ได้รับการยืนยันของอุปกรณ์ ซึ่งจะตรวจจับว่าการกำหนดค่าของอุปกรณ์มีการเปลี่ยนแปลงระหว่างการดำเนินการรีสตาร์ทหรือไม่
ฟีเจอร์ของซอฟต์แวร์สื่อ
-
android.software.midi
- แอปเชื่อมต่อกับเครื่องดนตรีหรือส่งออกเสียงโดยใช้โปรโตคอล Musical Instrument Digital Interface (MIDI)
-
android.software.print
- แอปนี้มีคำสั่งสำหรับพิมพ์เอกสารที่แสดงในอุปกรณ์
-
android.software.leanback
- แอปออกแบบมาเพื่อทำงานบนอุปกรณ์ Android TV
-
android.software.live_tv
- แอปสตรีมรายการทีวีสด
ฟีเจอร์ของซอฟต์แวร์อินเทอร์เฟซหน้าจอ
-
android.software.app_widgets
- แอปใช้หรือให้บริการวิดเจ็ตแอปและมีไว้สำหรับอุปกรณ์ที่มีหน้าจอหลักหรือตำแหน่งที่คล้ายกันซึ่งผู้ใช้สามารถฝังวิดเจ็ตแอปได้เท่านั้น
-
android.software.home_screen
- แอปจะทํางานแทนหน้าจอหลักของอุปกรณ์
-
android.software.live_wallpaper
- แอปใช้หรือมีวอลเปเปอร์ที่มีภาพเคลื่อนไหว
สิทธิ์ที่บ่งบอกถึงข้อกำหนดของฟีเจอร์
ตัวแปรคงที่ของฟีเจอร์ฮาร์ดแวร์และซอฟต์แวร์บางรายการจะพร้อมใช้งานสำหรับแอปพลิเคชันหลังจาก API ที่เกี่ยวข้อง ด้วยเหตุนี้ แอปบางแอปจึงอาจใช้ API ก่อนที่จะประกาศว่าต้องใช้ API โดยใช้ระบบ <uses-feature>
Google Play จะถือว่าสิทธิ์บางอย่างที่เกี่ยวข้องกับฮาร์ดแวร์บ่งชี้ว่าจำเป็นต้องใช้ฟีเจอร์ฮาร์ดแวร์ที่เกี่ยวข้องโดยค่าเริ่มต้น เพื่อป้องกันไม่ให้แอปเหล่านั้นพร้อมให้บริการโดยไม่ตั้งใจ ตัวอย่างเช่น แอปพลิเคชันที่ใช้บลูทูธต้องขอสิทธิ์ BLUETOOTH
ในองค์ประกอบ <uses-permission>
สำหรับแอปเดิม Google Play จะถือว่าการประกาศสิทธิ์หมายความว่าแอปพลิเคชันต้องใช้ฟีเจอร์ android.hardware.bluetooth
ที่เกี่ยวข้อง และตั้งค่าการกรองตามฟีเจอร์นั้น ตารางที่ 2 แสดงสิทธิ์ที่บ่งบอกถึงข้อกำหนดของฟีเจอร์ที่เทียบเท่ากับข้อกำหนดที่ประกาศไว้ในองค์ประกอบ <uses-feature>
การประกาศ <uses-feature>
รวมถึงแอตทริบิวต์ android:required
ที่ประกาศไว้จะมีความสําคัญเหนือกว่าฟีเจอร์ที่สื่อถึงโดยสิทธิ์ในตาราง 2 เสมอ สําหรับสิทธิ์เหล่านี้ คุณปิดใช้การกรองตามฟีเจอร์ที่นัยได้โดยการประกาศฟีเจอร์อย่างชัดเจนในองค์ประกอบ <uses-feature>
โดยตั้งค่าแอตทริบิวต์ required
เป็น false
ตัวอย่างเช่น หากต้องการปิดใช้การกรองตามสิทธิ์ CAMERA
ให้เพิ่มการประกาศ <uses-feature>
ต่อไปนี้ลงในไฟล์ Manifest
<uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
ข้อควรระวัง: หากแอปกำหนดเป้าหมายเป็น Android 5.0 (API ระดับ 21) ขึ้นไปและใช้สิทธิ์ ACCESS_COARSE_LOCATION
หรือ ACCESS_FINE_LOCATION
เพื่อรับการอัปเดตตำแหน่งจากเครือข่ายหรือ GPS ตามลำดับ คุณต้องประกาศอย่างชัดเจนว่าแอปของคุณใช้ฟีเจอร์ฮาร์ดแวร์ android.hardware.location.network
หรือ android.hardware.location.gps
ตาราง 2 สิทธิ์ของอุปกรณ์ที่บ่งบอกถึงการใช้ฮาร์ดแวร์ของอุปกรณ์
หมวดหมู่ | สิทธิ์ | ข้อกำหนดฟีเจอร์โดยนัย |
---|---|---|
บลูทูธ | BLUETOOTH |
android.hardware.bluetooth
ดูรายละเอียดได้ที่การจัดการพิเศษสำหรับฟีเจอร์บลูทูธ |
BLUETOOTH_ADMIN |
android.hardware.bluetooth |
|
กล้อง | CAMERA |
android.hardware.camera android.hardware.camera.autofocus |
ตำแหน่ง | ACCESS_MOCK_LOCATION |
android.hardware.location |
ACCESS_LOCATION_EXTRA_COMMANDS |
android.hardware.location |
|
INSTALL_LOCATION_PROVIDER |
android.hardware.location |
|
ACCESS_COARSE_LOCATION |
|
|
ACCESS_FINE_LOCATION |
|
|
ไมโครโฟน | RECORD_AUDIO |
android.hardware.microphone |
โทรศัพท์ | CALL_PHONE |
android.hardware.telephony |
CALL_PRIVILEGED |
android.hardware.telephony |
|
MODIFY_PHONE_STATE |
android.hardware.telephony |
|
PROCESS_OUTGOING_CALLS |
android.hardware.telephony |
|
READ_SMS |
android.hardware.telephony |
|
RECEIVE_SMS |
android.hardware.telephony |
|
RECEIVE_MMS |
android.hardware.telephony |
|
RECEIVE_WAP_PUSH |
android.hardware.telephony |
|
SEND_SMS |
android.hardware.telephony |
|
WRITE_APN_SETTINGS |
android.hardware.telephony |
|
WRITE_SMS |
android.hardware.telephony |
|
Wi-Fi | ACCESS_WIFI_STATE |
android.hardware.wifi |
CHANGE_WIFI_STATE |
android.hardware.wifi |
|
CHANGE_WIFI_MULTICAST_STATE |
android.hardware.wifi |