我不这么认为。我同意这是一种痛苦,但Google想要的是在安装时摆脱授予权限的方案,然后再也不要再问。
你可以做的最好的事情莫过于控制情况一点,并检测是否在启动时授予权限,如果他们不是,请将用户引导到一个奇特的活动,告诉用户你的挫败感谷歌,和他/她需要重新授权的权限为他/她自己的安全等等
您可以使用类似这样
/**
* Check the application has Permissions
*
* @param context App context
* @return Whether
*/
static boolean hasPermissions(Context context, String[] permissions) {
for (String p : permissions) {
if (ActivityCompat.checkSelfPermission(context, p) != PackageManager.PERMISSION_GRANTED)
return false;
}
return true;
}
,然后查询任意权限:
boolean hasMyPermissions = hasPermissions (context, {
android.Manifest.permission.READ_CONTACTS,
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.CALL_PHONE,
android.Manifest.permission.READ_EXTERNAL_STORAGE
});
if (!hasMyPermissions) {
// open a cool activity/fragment/etc with graphics, fancy text, etc.. then
// ask the user for permissions
ActivityCompat.requestPermissions(context, permissions, PERMISSIONS_REQUEST_CODE);
}
您将得到回调onRequestPermissionsResult
:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSIONS_REQUEST_CODE) {
// permissions: Same String[] with your req permissions
// grantresults: wether each individual permission has been granted or not
}
}
谢谢,但你不明白的问题。我有我的应用程序安装在50000设备。它针对的是棒棒糖。然后我修改它,将其设置为针对Nougat并在运行时请求权限。它运行良好,但问题是它要求对已安装设备的50000个权限。因为一旦更新,应用程序没有授予权限,因此它会要求它们。这使得许多用户不喜欢该应用,因为他们认为该应用需要新的权限。用户不记得第一次安装时授予的权限。 – Ton
我明白你的问题。不幸的是,没有解决方案(afaik)。我建议你以某种方式通过显示自定义UI并通知用户来控制权限重新授予。否则,请告诉您的用户降级为棒棒堂:( – rupps
)所以,正如我所说的,Google这次做出了一个可怕的决定(再一次) – Ton