当前位置 : 主页 > 手机开发 > android >

使Android“uses-permission”可选

来源:互联网 收集:自由互联 发布时间:2021-06-11
我有这些: uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" / uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" / uses-feature android:name="android.hardware.location.gps" android:required="
我有这些:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-feature android:name="android.hardware.location.gps" android:required="false" />

我可以自己检查GPS:

locationManager = (LocationManager) 
    context.getSystemService(Context.LOCATION_SERVICE);

fSupportsGPS = (locationManager.getAllProviders().
    contains(LocationManager.GPS_PROVIDER));

但我还是有些疑惑.我希望我的应用程序在没有wifi / gps /网络的设备上运行.我唯一使用GPS的原因是在Google地图上显示用户位置. (与其他应用程序相比,这是一个微小的功能,所以我不想对它有任何要求.)

<uses-feature ...>告诉Android应用程序必须要求该功能,并且无法使用该功能,因此Android不允许用户安装该应用程序(事实上,它甚至不会出现在Play商店/市场中.

要让没有这些功能的用户安装您的应用程序,您只需为相应的功能添加android:required =“false”选项.您已使用此XML在清单中完成了以下操作:

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

要检测用户是否具有该功能(因为现在不是必须的),您可以使用Android API.您已经使用此Java代码完成了此操作:

locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);   
  fSupportsGPS = (locationManager.getAllProviders().contains(LocationManager.GPS_PROVIDER));

现在,您不能做的一件事是让使用Android 1.6及更早版本的用户安装应用程序,即使这些功能被标记为可选.这是b’co​​z,Android版本无法识别android:必需功能,如this answer中所述.

另外要记住的是一些< uses-permission ...>标签将触发对权限的一些隐含要求.

要解决这个问题,引用docs:

If you don’t want Google Play to filter based on a specific implied
feature, you can disable that behavior. To do so, declare the feature
explicitly in a element and include an
android:required=”false” attribute. For example, to disable filtering
derived from the CAMERA permission, you would declare the feature as
shown below.

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

根据this page,< uses-permission android:name =“android.permission.ACCESS_COARSE_LOCATION”/>意味着网络的要求.要禁用它,请将其添加到清单中:

<uses-feature android:name="android.hardware.location.network" android:required="false" />
网友评论