Android DocumentFile 基本使用

调用DocumentUI申请权限
Android R实现访问外部存储的Android/data方案

申请权限选择的目录树后,后续所以文件操作都需要按照此目录树为基础做文件操作

Uri的构造: “content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata/document/primary%3AAndroid%2Fdata”;

外部存储:content://com.android.externalstorage.documents
选择的目录树关键字:/tree/primary
选择的文件关键字:/document/primary

Uri uri = Uri.parse(“content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata/document/primary%3AAndroid%2Fdata”);

DocumentFile API

https://developer.android.com/reference/androidx/documentfile/provider/DocumentFile

DocumentFile API的使用

// 包名/file目录
    public static final String NOTE_BOOK_FILES_URI =
            "content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata/document/primary%3AAndroid%2Fdata%2Fcom.freeme.freemenote%2Ffiles";

//判断文件是否存在 DocumentFile
Uri filesUri = Uri.parse(NOTE_BOOK_FILES_URI);
boolean isExistsFilesDir = DocumentFile.fromSingleUri(mContext, filesUri).exists();

//不存在则创建 packageUri为父目录树
if (!isExistsFilesDir) {
    try {
        filesUri = DocumentsContract.createDocument(mContext.getContentResolver(), packageUri, "vnd.android.document/directory", "files");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

//复制文件 File to DocumentFile DocumentsContract
public static void fileToDocumentFile(Context context, File originFile, String fileName, Uri parentUri) {
    //String fileName = originFile.getName();
    try {
        InputStream in = new FileInputStream(originFile);
        Uri documentFile = DocumentsContract.createDocument(context.getContentResolver(), parentUri, "*/*", fileName);
        //DocumentFile写入流
        OutputStream out = context.getContentResolver().openOutputStream(documentFile);
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

// 读取DocumentFile to File
public static List<File> documentFileToFile(Context context) {
    List<File> allFile = new ArrayList<File>();
    Uri dirUri = Uri.parse(Constant.NOTE_BOOK_FILES_URI);
    DocumentFile documentFile = DocumentFile.fromTreeUri(context, dirUri);
    //遍历DocumentFile
    DocumentFile[] files = documentFile.listFiles();
    LogUtil.d(Constant.TAG, "documentFileToFile files count=" + files.length);
    for (DocumentFile file : files) {
        String fileName = file.getName();
        Uri fileUri = file.getUri();
        LogUtil.d(Constant.TAG, "documentFileToFile fileName=" + fileName + " fileUri=" + fileUri);
        try {
            //DocumentFile输入流
            InputStream in = context.getContentResolver().openInputStream(fileUri);
            File newFile = new File(Constant.BACKUP_DIR_PATH, fileName);
            OutputStream out = new FileOutputStream(newFile);
            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            in.close();
            out.close();
            allFile.add(newFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return allFile;
}

DocumentFile报错

Permission Denial: writing com.android.externalstorage.ExternalStorageProvider uri content:

原因:授权的Uri和使用时调用的Uri不匹配

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 Android使用 ECharts,您需要将 ECharts JavaScript 库嵌入到您的 Android 应用程序中,并在 WebView 中加载 ECharts。以下是一个基本的步骤: 1. 将 ECharts JavaScript 库文件下载到您的项目中。您可以在 ECharts 官网上下载。 2. 在您的 Android 项目中创建一个 assets 目录,并将 ECharts JavaScript 库文件放到该目录中。 3. 在您的 Android 代码中,使用 WebView 控件加载 ECharts JavaScript 库文件。 4. 创建一个 HTML 文件,将 ECharts 初始化代码嵌入其中,并将该文件放到 assets 目录中。 5. 在 WebView 控件中加载该 HTML 文件,以显示您的 ECharts 图表。 这是一个简单的示例代码片段,可以让您开始使用 ECharts: ```java WebView webView = findViewById(R.id.webView); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webView.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { // 加载完成后调用 JavaScript 函数初始化 ECharts 图表 view.loadUrl("javascript:echartsInit()"); } }); // 加载 ECharts JavaScript 库文件 webView.loadUrl("file:///android_asset/echarts.min.js"); // 加载包含 ECharts 初始化代码的 HTML 文件 webView.loadUrl("file:///android_asset/echarts.html"); ``` 请注意,在上面的代码示例中,我们将 ECharts 初始化代码嵌入到名为 echarts.html 的 HTML 文件中,并在 WebView 控件中加载该文件。这个 HTML 文件应该类似于以下内容: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ECharts Demo</title> <script src="echarts.min.js"></script> </head> <body> <div id="chart" style="width: 100%; height: 100%;"></div> <script type="text/javascript"> function echartsInit() { // 创建 ECharts 实例 var myChart = echarts.init(document.getElementById('chart')); // 在这里配置 ECharts 图表 // ... } </script> </body> </html> ``` 请注意,上面的 HTML 文件中包含一个名为 echarts.min.js 的 JavaScript 文件,这是我们在 Android 项目的 assets 目录中放置的 ECharts JavaScript 库文件。在 echartsInit() 函数中,您可以使用 ECharts API 配置您的图表。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值