V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuhuanpku
V2EX  ›  Android

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

  •  
  •   xuhuanpku · 2018-01-21 21:21:56 +08:00 · 10138 次点击
    这是一个创建于 2503 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    7 条回复    2018-01-24 10:17:57 +08:00
    zhgg0
        1
    zhgg0  
       2018-01-21 21:41:27 +08:00   ❤️ 1
    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
        2
    honeycomb  
       2018-01-22 12:56:57 +08:00 via Android
    compact 库已经提供了现成的获取运行时权限的代码。

    还有个办法就是降 targetsdk
    zpxshl
        3
    zpxshl  
       2018-01-22 20:37:14 +08:00 via Android
    如楼上所说,降低 targetsdk 到 6.0 对应的那个版本以下,系统默认给你申请的全部权限。但用户依旧可以手动禁止。要标准就像楼上的楼上一样申请权限,有几个开源框架可以使用,比原生代码简单。
    国内有些魔改系统比如 miui 可能不按谷歌定下的规范来,比如拒绝了你的权限申请返回 true...要注意一下。
    demo06
        4
    demo06  
       2018-01-23 14:00:07 +08:00
    @zpxshl 我之前魅族一款手机获取的手机号 中间有两位数字顺序颠倒,我也是很无奈
    xuhuanpku
        5
    xuhuanpku  
    OP
       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
        6
    honeycomb  
       2018-01-23 17:33:33 +08:00 via Android
    @xuhuanpku 建议你直接拉一个 sample 项目里关于运行时权限的
    AndroidTraveler
        7
    AndroidTraveler  
       2018-01-24 10:17:57 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1048 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 22:16 · PVG 06:16 · LAX 14:16 · JFK 17:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.