简单安卓 APP,需要动态调用外部存储权限

2018-01-21 21:21:56 +08:00
 xuhuanpku

自己的小 APP,以前手机版本比较低,只是在 AndroidManifest.xml 写入了调用外部存储权限,但是现在手机升级之后,必须动态调用权限,求帮忙 QQ:5194434

6021 次点击
所在节点    Android
7 条回复
zhgg0
2018-01-21 21:41:27 +08:00
if(ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED)) {
ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
}

既然是小 app 就不需要考虑太多,在启动时,判断下系统版本,弄个 for 循环把所有必需的权限全这么申请一遍。
少数特殊权限可以在使用时判断,无权限流程不往下走,在 onRequestPermissionsResult 中接收到权限后再接着流程走。
honeycomb
2018-01-22 12:56:57 +08:00
compact 库已经提供了现成的获取运行时权限的代码。

还有个办法就是降 targetsdk
zpxshl
2018-01-22 20:37:14 +08:00
如楼上所说,降低 targetsdk 到 6.0 对应的那个版本以下,系统默认给你申请的全部权限。但用户依旧可以手动禁止。要标准就像楼上的楼上一样申请权限,有几个开源框架可以使用,比原生代码简单。
国内有些魔改系统比如 miui 可能不按谷歌定下的规范来,比如拒绝了你的权限申请返回 true...要注意一下。
demo06
2018-01-23 14:00:07 +08:00
@zpxshl 我之前魅族一款手机获取的手机号 中间有两位数字顺序颠倒,我也是很无奈
xuhuanpku
2018-01-23 14:54:09 +08:00
@zhgg0 我也查了,可以加入这些
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};

public static void verifyStoragePermissions(Activity activity) {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE);

if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE);
}
}

不过这是应该加在哪呢?有人说是 Activity ?难道是在 AndroidManifest.xml 里面?
honeycomb
2018-01-23 17:33:33 +08:00
@xuhuanpku 建议你直接拉一个 sample 项目里关于运行时权限的
AndroidTraveler
2018-01-24 10:17:57 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/424746

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX