【Android 文件管理】分区存储 ( MediaStore 文件操作 )(二)

简介: 【Android 文件管理】分区存储 ( MediaStore 文件操作 )(二)

启动 Android 11 系统的模拟器 , 然后部署该应用 , 文件创建成功 ;

image.png







三、完整代码示例




1、MainActivity 核心代码


package kim.hsl.file
import android.Manifest
import android.content.ContentValues
import android.net.Uri
import android.os.Bundle
import android.os.Environment
import android.provider.MediaStore
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import pub.devrel.easypermissions.AfterPermissionGranted
import pub.devrel.easypermissions.EasyPermissions
import java.io.BufferedOutputStream
import java.io.OutputStream
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // 动态权限获取
        doSomethingWithPermissions()
    }
    @AfterPermissionGranted( 100 )
    fun doSomethingWithPermissions(){
        if(EasyPermissions.hasPermissions(this,
                        Manifest.permission.READ_EXTERNAL_STORAGE,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE)){
            // 分支一 : 如果有上述权限, 执行该操作
            Toast.makeText(this, "权限申请通过", Toast.LENGTH_LONG).show()
            // Android 11 中创建文件
            createFile()
        }else{
            // 分支二 : 如果没有上述权限 , 那么申请权限
            EasyPermissions.requestPermissions(
                    this,
                    "权限申请原理对话框 : 描述申请权限的原理",
                    100,
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
            )
        }
    }
    /**
     * 创建文件
     * 在 Download 目录下创建 hello.txt
     */
    fun createFile(){
        // 操作 external.db 数据库
        // 获取 Uri 路径
        var uri: Uri = MediaStore.Files.getContentUri("external")
        // 将要新建的文件的文件索引插入到 external.db 数据库中
        // 需要插入到 external.db 数据库 files 表中, 这里就需要设置一些描述信息
        var contentValues: ContentValues = ContentValues()
        // 设置插入 external.db 数据库中的 files 数据表的各个字段的值
        // 设置存储路径 , files 数据表中的对应 relative_path 字段在 MediaStore 中以常量形式定义
        contentValues.put(MediaStore.Downloads.RELATIVE_PATH, "${Environment.DIRECTORY_DOWNLOADS}/hello")
        // 设置文件名称
        contentValues.put(MediaStore.Downloads.DISPLAY_NAME, "hello.txt")
        // 设置文件标题, 一般是删除后缀, 可以不设置
        contentValues.put(MediaStore.Downloads.TITLE, "hello")
        // uri 表示操作哪个数据库 , contentValues 表示要插入的数据内容
        var insert: Uri = contentResolver.insert(uri, contentValues)!!
        // 向 Download/hello/hello.txt 文件中插入数据
        var os: OutputStream = contentResolver.openOutputStream(insert)!!
        var bos = BufferedOutputStream(os)
        bos.write("Hello World".toByteArray())
        bos.close()
    }
}



2、build.gradle 构建脚本


引入 pub.devrel:easypermissions:3.0.0 依赖库 ; ( 其它省略 )


dependencies {
    // 使用 Android X 的应用添加该依赖
    implementation 'pub.devrel:easypermissions:3.0.0'
}




3、清单文件


配置 SD 卡读写权限 ; ( 其它省略 )


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="kim.hsl.file">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</manifest>






五、相关文档资料


Android 文件处理参考文档 :


数据和文件存储概览 : https://developer.android.google.cn/training/data-storage


访问应用专属文件 : https://developer.android.google.cn/training/data-storage/app-specific#kotlin


保存到共享的存储空间 : https://developer.android.google.cn/training/data-storage/shared


管理存储设备上的所有文件 : https://developer.android.google.cn/training/data-storage/manage-all-files


分享文件 : https://developer.android.google.cn/training/secure-file-sharing


应用安装位置 : https://developer.android.google.cn/guide/topics/data/install-location


Android 存储用例和最佳做法 : https://developer.android.google.cn/training/data-storage/use-cases


FileProvider : https://developer.android.google.cn/reference/androidx/core/content/FileProvider



博客源码 :


GitHub : https://github.com/han1202012/File


CSDN : https://download.csdn.net/download/han1202012/18832417


目录
相关文章
|
存储 API 文件存储
47. 【Android教程】SharedPreferences 存储
47. 【Android教程】SharedPreferences 存储
361 2
|
Shell Android开发
MT8385 Android AB分区系统升级(命令模式)
MT8385 Android AB分区系统升级(命令模式)
527 0
|
安全 Java Android开发
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
如何解压OTA升级包、编辑升级包内容(例如移除不需要更新的分区)、重新打包、签名以及验证OTA文件的过程。
2394 2
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
|
存储 安全 API
Android经典实战之存储方案对比:SharedPreferences vs MMKV vs DataStore
本文介绍了 Android 开发中常用的键值对存储方案,包括 SharedPreferences、MMKV 和 DataStore,并对比了它们在性能、并发处理、易用性和稳定性上的特点。通过实际代码示例,帮助开发者根据项目需求选择最适合的存储方案,提升应用性能和用户体验。
1372 1
|
存储 缓存 Android开发
Android系统分区与升级
Android系统分区与升级
865 4
|
存储 监控 Java
Android Service之设备存储空间监控 DeviceStorageMonitorService
Android Service之设备存储空间监控 DeviceStorageMonitorService
571 2
|
存储 缓存 Linux
Android 系统的分区
Android 系统的分区
2171 1
|
存储 API Android开发
Android 11 中的存储机制更新,面试心得体会
Android 11 中的存储机制更新,面试心得体会
|
Java Android开发
Android OTG U盘无法显示在系统文件管理的修改
Android OTG U盘无法显示在系统文件管理的修改
371 0
|
Java API Android开发
Android系统升级A/B分区OTA升级应用层调用UpdateEngine代码
Android系统升级A/B分区OTA升级应用层调用UpdateEngine代码
1102 0

热门文章

最新文章