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

Android 是否可以使应用程序适应已接受的权限?,android,android-permissions,android-version,Android,Android Permissions,Android Version,我的应用程序需要相当多的权限。 让我们考虑以下几点:互联网、相机、精细定位。 Internet权限是唯一需要的权限。例如,我知道只有10%的客户使用摄像头,只有2%的客户使用GPS。我还知道,在引入gps功能后,20%的客户拒绝使用我的应用程序。 据我所知,如果要制作具有不同功能的应用程序的不同版本,有一种选择。 但是,是否可以让用户选择他想要接受的权限?需要被拒绝权限的功能将被禁用。如果调用了这些功能,将弹出一个解释,建议接受所需的权限或在没有这些功能的情况下继续。您可以使用以下代码段检查您的

我的应用程序需要相当多的权限。
让我们考虑以下几点:互联网、相机、精细定位。 Internet权限是唯一需要的权限。例如,我知道只有10%的客户使用摄像头,只有2%的客户使用GPS。我还知道,在引入gps功能后,20%的客户拒绝使用我的应用程序。
据我所知,如果要制作具有不同功能的应用程序的不同版本,有一种选择。

但是,是否可以让用户选择他想要接受的权限?需要被拒绝权限的功能将被禁用。如果调用了这些功能,将弹出一个解释,建议接受所需的权限或在没有这些功能的情况下继续。

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

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

<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");
}

PackageManager PackageManager=this.getPackageManager();
if(packageManager.hasSystemFeature(packageManager.FEATURE_电话))
{
日志d(“测试”,“电话可用”);
}否则{
日志d(“测试”,“电话不可用”);
}

除非您具有ROOT访问权限

有没有可能给用户一个选择,哪一个 他想要接受的权限

。。。答案是“”,而不是在股票Android上

如果这样的特征被称为一个解释,将弹出建议 接受所需的权限或在没有此功能的情况下继续

这将是一个安全风险-这将更容易欺骗用户接受新的权限

这个网站上有一些类似的问题,答案都是一样的:


更新#1 先前的回答表明这是可能的,但没有提供任何代码。它已经被删除,这表明它还不能被删除


更新#2 @Neji评论说,在再次被移除之前,它曾短暂投入生产(显然是偶然的)


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

看起来不错。然而,当用户从谷歌商店安装应用程序时,他被要求接受清单中列出的所有权限。他只是没有理由不接受其中一些,或者有可能给用户这样的选择?@vipul你在谈论哪些最新版本?android没有授予任何权限来禁用应用程序请求的任何权限@据我所知,Vipulsah仍然要求获得许可。它允许在设备上安装应用程序,这会丢失一些硬件,丢失的硬件对用户来说并不重要application@Yarh@Vipul的否决票可能是因为这没有回答问题:
是否可以让用户选择他想要接受的权限?
。“但是,是否可以让用户选择他要接受的权限?“-当然,应用程序可以询问用户是否允许某些内容,但他们必须信任应用程序,以尊重该选择。Stock Android不提供对权限的行项目否决权,但我相信一些替代版本会这样做。如果这里提供的代码与这些应用程序的交互良好与否,这将是很有趣的。谷歌有AppOps,但他们在4.4.2的最新更新中删除了它,但我觉得必须有一个窗口,用户可以更新应用程序请求的权限,但这可能会增加开发人员的工作,就像使用任何API之前一样,他们必须检查许可被授予或no@Neji是的,在我的回答中添加了对这一点的评论。谢谢你的指点out@Yarh哪个Trulia应用程序?请求位于权限列表顶部的您的位置。在为你研究这个答案的过程中,我在某处读到Play Store应用程序在某个点上有一个权限错误(无法再次找到链接)。是的,它现在就在那里。我将删除之前的评论,因为我无法提供support@Yarh-真遗憾-我希望能找到一些例外
<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");
}