简单安卓 APP,需要动态调用外部存储权限 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuhuanpku
V2EX    Android

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

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

    自己的小 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     Solana     2671 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 08:35 PVG 16:35 LAX 01:35 JFK 04:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86