我不这么认为。我同意,这很痛苦,但谷歌想要的正是摆脱在安装时授予权限然后不再询问的方案。
恕我直言,您可以做的最好的事情是稍微控制一下情况并检测是否在启动时授予权限,如果没有,则将用户引导到一个花哨的活动,在那里您告诉用户您对谷歌的不满, 并且他/她需要再次授权权限以确保他/她自己的安全等...
你可以使用这样的东西
/**
* 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
}
}