是否可以使应用程序适应已接受的权限?

时间:2014-05-07 05:45:22

标签: android android-permissions android-version

我的申请需要很多权限 让我们考虑以下:互联网,相机,Fine_location Internet权限是唯一需要的权限。例如,我知道只有10%的客户使用相机,只有2%的客户使用GPS。我也知道,在gps功能介绍之后,我的客户中有20%拒绝使用我的应用程序 据我所知,如果要制作具有不同功能的不同版本的应用程序,可以选择一种方法 但是,是否可以选择用户,他想接受哪些权限?需要拒绝权限的功能将被禁用。如果调用此类功能,则会弹出建议以接受所需权限或在没有此类功能的情况下继续进行解释。

2 个答案:

答案 0 :(得分:3)

除非你有ROOT访问权....

  

是否可以为用户提供选择   他想接受的权限?

...答案是“”,而不是现货Android。

  

如果调用此类功能,则会弹出建议   接受所需的许可或在没有此类功能的情况下继续。

这会带来安全风险 - 它会让用户更容易欺骗接受新的权限。

在这个网站上有一些类似的问题,答案都说同样的事情:


更新#1

之前的回答表明这是可能的,但没有提供任何代码。它已被删除,表明它还没有完成。


更新#2

@Neji关于App Ops的评论在被再次删除之前被简要地投入生产(显然是偶然的)。

但是,这允许限制某些应用和用户的权限。 IIRC这不允许您为未在清单中声明它们的应用程序授予额外权限。

答案 1 :(得分:0)

您可以使用以下代码段检查您的应用程序是否已被授予特定权限。 (下面我给出了例子)

if (context
    .checkCallingOrSelfPermission(permission.ACCESS_COARSE_LOCATION) ==
    PackageManager.PERMISSION_GRANTED
    ||
    context
    .checkCallingOrSelfPermission(permission.ACCESS_FINE_LOCATION) ==
    PackageManager.PERMISSION_GRANTED

) {
    // we have been granted above permission.Lets do the task

}

对于系统功能,您可以在清单中指定以下内容。

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


PackageManager packageManager = this.getPackageManager();
if (packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY))

{
    Log.d("TEST", "TELEPHONY IS AVAILABLE");
} else {
    Log.d("TEST", "TELEPHONY IS NOT AVAILABLE");
}