Android 文件管理权限适配

Android 文件管理权限适配

1. Manifest配置

相关代码:

	<!--Android 6-10 权限适配-->
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!--Android 10以上 权限适配-->
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:requestLegacyExternalStorage="true" 
        android:supportsRtl="true"
        android:theme="@style/Theme.AndroidProGuard"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
	 </application>

2. MainActivity请求权限

// 工具类配置
Utils.init(this)

// 请求权限
private fun requestFilePermission() {
        when {
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.R -> {// Android 10以上
                if (!Environment.isExternalStorageManager()) {
                    AlertDialog.Builder(this)
                        .setTitle("提示")
                        .setMessage("开启文件访问权限!")
                        .setNegativeButton(
                            "取消"
                        ) { dialog, _ ->
                            dialog.dismiss()
                        }
                        .setPositiveButton("前往") { dialog, _ ->
                            dialog.dismiss()
                            startActivity(Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION))
                        }.create().show()

                }
            }
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.M -> {// Android 6以上
                if (!PermissionUtils.isGranted(
                        Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        Manifest.permission.READ_EXTERNAL_STORAGE
                    )
                ) {
                    PermissionUtils.permission(
                        Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        Manifest.permission.READ_EXTERNAL_STORAGE
                    ).callback { isAllGranted, _, _, _ ->
                        if (!isAllGranted) {
                            ToastUtils.showShort("没有开启文件权限")
                        }
                    }.request()
                }
            }
            else -> {}
        }
    }

PermissionUtils的工具类导入

implementation "com.blankj:utilcodex:1.30.0"

3. 获取手机内在根目录

	// 获取根目录
    private fun getExternalStorageDirectory(): String? {
        val extFileStatus = Environment.getExternalStorageState()
        val extFile = Environment.getExternalStorageDirectory()
        // 判断是否处于挂载状态
        if (extFileStatus == Environment.MEDIA_MOUNTED && extFile.exists() && extFile.isDirectory
            && extFile.canWrite()
        ) {
            return extFile.absolutePath
        }
        return null
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值