Có, Google Play sẽ lọc ra nội dung không phù hợp với thiết bị hiện tại. Nếu thiết bị của bạn không có camera, bạn sẽ không nhìn thấy các ứng dụng camera nào, tuy nhiên bạn vẫn có thể xem các ứng dụng sử dụng camera như một tính năng nhỏ. Sự khác biệt được thực hiện bằng cách sử dụng android:required
khi khai báo một tính năng được sử dụng.
Lưu ý rằng các quyền khác với các tính năng. Quyền là có để bảo mật và bạn tuyên bố việc sử dụng quyền theo <uses-permission>
thẻ. Mặt khác, các tính năng có tính tương thích và bạn tuyên bố việc sử dụng các tính năng theo <uses-feature>
thẻ.
Google Play sẽ lọc ứng dụng của bạn dựa trên những tính năng mà nó sử dụng. Tuy nhiên, ngay cả khi bạn không bao giờ khai báo bất kỳ <uses-feature>
thẻ nào trong tệp kê khai Android, ứng dụng của bạn vẫn có thể được lọc. Điều này là do Google cũng đọc qua tất cả các quyền được khai báo của bạn và đáp ứng mọi yêu cầu tính năng mà bạn chưa khai báo rõ ràng. Vì vậy, nếu bạn tuyên bố sự READ_SMS
cho phép thì điều này có nghĩa là việc sử dụngandroid.hardware.telephony
tính năng này. Vì vậy, nó sẽ không hiển thị trên máy tính bảng hoặc các thiết bị khác mà không có khả năng của điện thoại.
Trích dẫn phần này ở đây :
Lưu ý: Một số quyền hệ thống hoàn toàn yêu cầu tính khả dụng của tính năng thiết bị. Ví dụ: nếu ứng dụng của bạn yêu cầu quyền truy cập vào BLUETOOTH, thì điều này hoàn toàn yêu cầu tính năng thiết bị FEATURE_BLUETOOTH. Bạn có thể tắt tính năng lọc dựa trên tính năng này và cung cấp ứng dụng của bạn cho các thiết bị không có Bluetooth bằng cách đặt thuộc tính bắt buộc thành "false" trong thẻ. Để biết thêm thông tin về các tính năng thiết bị được yêu cầu ngầm, hãy đọc Quyền cho phép Yêu cầu Tính năng.
Vì vậy, để tránh việc ứng dụng của bạn được lọc trên Google Play dựa trên một tính năng nhất định mà ứng dụng của bạn đang sử dụng, bạn cần phải khai báo rõ ràng với android:required
cài đặt thành false. Tuy nhiên, xin lưu ý rằng tính năng này không còn được đảm bảo hiện diện trên thiết bị mà ứng dụng của bạn đang chạy trên bạn cần kiểm tra xem tính năng này có tồn tại vào thời gian chạy hay không.
Ví dụ về những gì AndroidManifest.xml của bạn nên chứa.
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-feature android:name="android.hardware.telephony" android:required="false" />
Và một trích dẫn về cách google lọc các ứng dụng dựa trên các tính năng được khai báo rõ ràng. Liên kết
Một tính năng được khai báo rõ ràng là một tính năng mà ứng dụng của bạn khai báo trong một phần tử. Khai báo tính năng có thể bao gồm một android: required = ["true" | Thuộc tính "false"] (nếu bạn đang biên dịch theo API cấp 5 trở lên), cho phép bạn chỉ định liệu ứng dụng có hoàn toàn yêu cầu tính năng và không thể hoạt động đúng nếu không có nó ("true") hay ứng dụng có thích sử dụng tính năng này không nếu có, nhưng được thiết kế để chạy mà không có nó ("false").
Google Play xử lý các tính năng được khai báo rõ ràng theo cách này:
- Nếu một tính năng được khai báo rõ ràng là bắt buộc, Google Play sẽ thêm tính năng này vào danh sách các tính năng cần thiết cho ứng dụng. Sau đó, nó lọc ứng dụng từ người dùng trên các thiết bị không cung cấp tính năng đó. Ví dụ:
<uses-feature android:name="android.hardware.camera" android:required="true" />
- Nếu một tính năng được tuyên bố rõ ràng là không bắt buộc, Google Play sẽ không thêm tính năng này vào danh sách các tính năng được yêu cầu. Vì lý do đó, một tính năng không bắt buộc được tuyên bố rõ ràng không bao giờ được xem xét khi lọc ứng dụng. Ngay cả khi thiết bị không cung cấp tính năng được khai báo, Google Play vẫn sẽ xem xét ứng dụng tương thích với thiết bị và sẽ hiển thị cho người dùng, trừ khi áp dụng các quy tắc lọc khác. Ví dụ:
<uses-feature android:name="android.hardware.camera" android:required="false" />
- Nếu một tính năng được khai báo rõ ràng, nhưng không có thuộc tính android: required, Google Play giả định rằng tính năng này là bắt buộc và thiết lập tính năng lọc trên nó. Nói chung, nếu ứng dụng của bạn được thiết kế để chạy trên Android 1.6 và các phiên bản cũ hơn, thuộc tính android: required không có sẵn trong API và Google Play giả định rằng bất kỳ và tất cả các khai báo đều được yêu cầu.
Lưu ý: Bằng cách khai báo một tính năng một cách rõ ràng và bao gồm một thuộc tính android: required = "false", bạn có thể vô hiệu hóa tất cả các bộ lọc trên Google Play cho tính năng được chỉ định một cách hiệu quả.
Về cơ bản nếu bạn sử dụng các quyền yêu cầu một tính năng, hãy xem danh sách này , bạn nên khai báo rõ ràng tính năng đó với android:required="false"
bên cạnh nó và bạn sẽ ổn. Nhưng cũng vì tính năng này không được đảm bảo ở đó nên bạn cũng cần kiểm tra xem tính năng này có tồn tại vào thời gian chạy trước khi sử dụng bất kỳ phương pháp nào yêu cầu nó không. Nếu không, một máy tính bảng sẽ gặp sự cố Phone.call(5551234)
, trong khi vớiandroid:required="true"
bạn sẽ không được yêu cầu kiểm tra xem điện thoại có ở đó không vì nó phải được lọc ra nếu không ứng dụng của bạn đã bị lọc. Mặc dù bạn có thể muốn kiểm tra nó bằng mọi cách vì mọi người có thể cài đặt nó từ các nguồn khác, một cái gì đó để xem xét.
Ví dụ về kiểm tra tính năng tại thời gian chạy.
PackageManager pm = getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
// This device does have a phone.
havePhone = true;
}
Nếu bạn có thêm câu hỏi về điều này, tôi thực sự khuyên bạn nên đọc qua: