Manifest中的 <uses-permission android:name="android.permission.CAMERA" /> 和 <uses-feature android:name="android.hardware.camera" android:required=false />到底什么关系?
其实,他们俩一个负责描述 app 会用到什么功能,一个负责向系统请求 app 所需要的权限,它们经常会搭配在一起使用。开发者应该根据自己的实际需求来使用对应的标签。
uses-feature 的作用更像是一个过滤器,google play 商店会根据该标签来过滤设备,比如用户在 uses-feature 中声明了要使用相机,这时候在 google play 商店中该 app 就不再对没有照相机的设备显示。但是,如果用户同时也设置了 uses-feature 的属性 android:required 为 false 的话,google play 商店仍然会对没有照相机的设备显示该 app。
uses-permission 则像是一个权限助手,帮助 app 去向用户请求 app 需要使用的权限

 

一下转载自:https://blog.csdn.net/sd19871122/article/details/50831920

这两天发现我们的应用在Android Market 上,有的手机搜索不到,原因是:

此应用只适用于具备相应功能的设备

然后后面列出了许多硬件设备的uses-feature

问题的原因是我们的应用中需要的权限太多,导致没有定义中提到的权限的设备无法搜索到我们的应用。

经调查:我们的应用中并没有使用到uses-feature标签,那为什么给出的提示会是“此应用只适用于具备相应功能的设备”呢?

后来查了一下原因,在我们使用permission的时候,在需要某些硬件权限的时候,其实已经隐含使用了uses-feature。

如下表:

CategoryThis Permission...Implies This Feature Requirement
Bluetooth BLUETOOTH android.hardware.bluetooth

(See Special handling for Bluetooth feature for details.)

BLUETOOTH_ADMIN android.hardware.bluetooth
Camera CAMERA android.hardware.camera and 
android.hardware.camera.autofocus
Location ACCESS_MOCK_LOCATION android.hardware.location
ACCESS_LOCATION_EXTRA_COMMANDS android.hardware.location
INSTALL_LOCATION_PROVIDER android.hardware.location
ACCESS_COARSE_LOCATION android.hardware.location.network and 
android.hardware.location
ACCESS_FINE_LOCATION android.hardware.location.gps and 
android.hardware.location
Microphone RECORD_AUDIO android.hardware.microphone
Telephony 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
Wifi ACCESS_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_MULTICAST_STATE android.hardware.wifi

 

这时我们又做了一下调查

我们的应用中有这样一个feature,查看文档后

 
 
  1. android.hardware.touchscreen 


注释为:

 
 
  1. applications require the android.hardware.touchscreen feature by default 


可以修改:

 
 
  1. <uses-feature android:name="android.hardware.touchscreen" android:required="false" /> 

这样我们就找到了问题的解决方法,即

 

 
 
  1. <uses-feature android:name="string" android:required="false" /> 

这样就不会要求设备必须具有该硬件设备,这样我们的应用程序就可以被更多的手机适配了。

posted on 2020-05-04 22:28  zzx_bky  阅读(307)  评论(0编辑  收藏  举报