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

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

  •  
  •   xuhuanpku Jan 21, 2018 14422 views
    This topic created in 3048 days ago, the information mentioned may be changed or developed.

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

    7 replies    2018-01-24 10:17:57 +08:00
    zhgg0
        1
    zhgg0  
       Jan 21, 2018   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  
       Jan 22, 2018 via Android
    compact 库已经提供了现成的获取运行时权限的代码。

    还有个办法就是降 targetsdk
    zpxshl
        3
    zpxshl  
       Jan 22, 2018 via Android
    如楼上所说,降低 targetsdk 到 6.0 对应的那个版本以下,系统默认给你申请的全部权限。但用户依旧可以手动禁止。要标准就像楼上的楼上一样申请权限,有几个开源框架可以使用,比原生代码简单。
    国内有些魔改系统比如 miui 可能不按谷歌定下的规范来,比如拒绝了你的权限申请返回 true...要注意一下。
    demo06
        4
    demo06  
       Jan 23, 2018
    @zpxshl 我之前魅族一款手机获取的手机号 中间有两位数字顺序颠倒,我也是很无奈
    xuhuanpku
        5
    xuhuanpku  
    OP
       Jan 23, 2018
    @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  
       Jan 23, 2018 via Android
    @xuhuanpku 建议你直接拉一个 sample 项目里关于运行时权限的
    AndroidTraveler
        7
    AndroidTraveler  
       Jan 24, 2018
    About     Help     Advertise     Blog     API     FAQ     Solana     4735 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 75ms UTC 09:48 PVG 17:48 LAX 02:48 JFK 05:48
    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