安卓动态申请权限

简介: 安卓动态申请权限

我们在使用一些官方app时,刚下载进去之后经常会弹出各种各样的权限获取请求,今天简单学习了下,希望不会误人子弟哈哈哈哈。

一、将需要用到的权限添加到Manifest清单里

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>

这一步很重要,本人Debug时发现如果缺少这步,进入界面后点击屏幕毫无反应......

private static final String[] REQUEST_PERMISSIONS = {
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.RECORD_AUDIO,
};
private static final int PERMISSION_REQUEST_CODE = 1;

同时将对应的权限放到1个String数组里,标记一个权限申请标识码。

二、OnStart方法申请权限


在OnStart方法里判断权限是否申请过,如果没有,进行申请,申请的方法里用到了之前的String数组和权限申请标识码


@Override
protected void onStart() {
    super.onStart();
    if (!hasPermissionsGranted(REQUEST_PERMISSIONS)) {
        Log.d(Tag,"-------activityCompat.requestPermissions--------");
        ActivityCompat.requestPermissions(this, REQUEST_PERMISSIONS, PERMISSION_REQUEST_CODE);
    }
}


hasPermissionsGranted()方法:遍历String里的权限检测是否已经授予。


 /**
     * ContextCompat类的checkSelfPermission方法用于检测用户是否授权了某个权限。
     * PackageManager.PERMISSION_DENIED : -1
     * PackageManager.PERMISSION_GRANTED : 0 表示授权成功
     */
    public boolean hasPermissionsGranted(@NonNull String[] permissions) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(this, permission)
                    != PackageManager.PERMISSION_GRANTED) {
                return false;
                //此时没有授权,返回false
            }
        }
        return true;
        //已经授权过,返回true
    }


onRequestPermissionsResult()方法:在对应的Activity中获取到回调结果,通过标识码和hasPermissionsGranted()方法判断是否授予权限成功,失败则调用finish()方法退出应用。


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    Log.d(Tag,"-------onRequestPermissionsResult--------");
    if (requestCode == PERMISSION_REQUEST_CODE) {
       if (!hasPermissionsGranted(REQUEST_PERMISSIONS)) {//返回false代表申请失败
           Toast.makeText(this, "授权失败", Toast.LENGTH_SHORT).show();
           this.finish();
       }
    } else {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

综上一个简单的权限申请demo已经成功。后续也可以在定制化的申请弹窗方面研究一下。

如有错误和疑问,敬请矫正!


目录
相关文章
|
6月前
|
存储 Android开发
如何查看Flutter应用在Android设备上已被撤销的权限?
如何查看Flutter应用在Android设备上已被撤销的权限?
271 64
|
6月前
|
存储 Android开发 数据安全/隐私保护
如何在Android设备上撤销Flutter应用程序的所有权限?
如何在Android设备上撤销Flutter应用程序的所有权限?
354 64
|
存储 安全 Android开发
"解锁Android权限迷宫:一场惊心动魄的动态权限请求之旅,让你的应用从平凡跃升至用户心尖的宠儿!"
【8月更文挑战第13天】随着Android系统的更新,权限管理变得至关重要。尤其从Android 6.0起,引入了动态权限请求,增强了用户隐私保护并要求开发者实现更精细的权限控制。本文采用问答形式,深入探讨动态权限请求机制与最佳实践,并提供示例代码。首先解释了动态权限的概念及其重要性;接着详述实现步骤:定义、检查、请求权限及处理结果;最后总结了六大最佳实践,包括适时请求、解释原因、提供替代方案、妥善处理拒绝情况、适应权限变更及兼容旧版系统,帮助开发者打造安全易用的应用。
237 0
|
10月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
883 11
|
存储 API Android开发
"解锁Android权限迷宫:一场惊心动魄的动态权限请求之旅,让你的应用从平凡跃升至用户心尖的宠儿!"
随着Android系统的更新,权限管理成为应用开发的关键。尤其在Android 6.0(API 级别 23)后,动态权限请求机制的引入提升了用户隐私保护,要求开发者进行更精细的权限管理。
219 2
|
Android开发
Android中如何动态的调整Dialog的背景深暗
在Android开发中,Dialog和DialogFragment可通过设置`Window`的`backgroundDimAmount`来控制背景变暗,突出对话框。在DialogFragment的`onCreateDialog`或`onViewCreated`中,获取`Dialog`的`Window`,设置`LayoutParams.dimAmount`(例如0.5f)并添加`FLAG_DIM_BEHIND`标志。要动态调整,可保存`LayoutParams`并在需要时更新。对于Dialog,创建时直接设置同样属性。还可以通过定义主题样式设置背景模糊程度。
375 7
|
Java Shell Android开发
android 权限申请
android 权限申请
246 5
|
XML Java Android开发
Android控件动态使用 (转)
Android控件动态使用 (转)
80 1
|
XML Java Android开发
Android RecyclerView用代码动态设置item的selector
Android RecyclerView用代码动态设置item的selector
169 0
|
存储 Java API
Android系统 文件访问权限笔记
Android系统 文件访问权限笔记
1456 1

热门文章

最新文章