我在大学的IT部门工作,我们正在开发一个应用程序来安装eduroam WiFi的正确设置(也许你已经听说过了)。
但是我在使用Android 6.0的自己的LG G4上运行它时遇到了问题。安装已编译的* .apk时,虽然它们是在AndroidManifest.xml中设置的,但它并不会要求任何权限。它适用于所有以前的Android版本。
现在是否必须在运行时请求权限?
答案 0 :(得分:39)
如果目标SDK版本为23,那么您需要在运行时询问“危险”权限。
如果是这种情况,那么如果您转到Settings > Apps > "Your app" > Permissions
,您应该能够看到没有授予任何权限。
如果您不想实施新系统,那么您可以将目标sdk版本减少到22以获得旧的权限系统。你仍然可以使用sdk 23版进行编译。
有关详细信息,请参阅the documentation。
答案 1 :(得分:2)
如果要在运行时请求权限,则应在应用中编写特殊请求。像这样:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
createPermissions();
}
public void createPermissions(){
String permission = Manifest.permission.READ_SMS;
if (ContextCompat.checkSelfPermission(getContext(), permission) != PackageManager.PERMISSION_GRANTED){
if(!ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), permission)){
requestPermissions(new String[]{permission}),
SMS_PERMISSION);
}
}
}
答案 2 :(得分:1)
如果用户运行的是Android 6.0(API级别23)或更高版本,则用户在运行应用程序时必须向您的应用授予权限。如果您一次面对大量请求权限的用户,则可能会使用户不知所措,并导致他们退出您的应用程序。相反,您应该在需要时请求权限。
在某些情况下,一个或多个权限可能对您的应用绝对必要。在应用启动后,立即要求所有这些权限是有意义的。例如,如果您制作摄影应用程序,则该应用程序将需要访问设备相机。当用户首次启动该应用程序时,他们不会被要求获得使用相机的许可而感到惊讶。但是,如果同一应用程序还具有与用户的联系人共享照片的功能,则您可能不应该在首次启动时要求READ_CONTACTS权限。相反,请等到用户尝试使用“共享”功能并请求许可。
如果您的应用提供了教程,则在教程序列结束时请求应用的基本权限可能是有意义的。
来源/参考文献https://developer.android.com/training/permissions/usage-notes