ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android Q私有目录与公共目录文件的交互(读取,复制,保存等)——Pittkai

2019-09-05 13:37:33  阅读:1862  来源: 互联网

标签:ost MediaStore values insertUri Pittkai Android null 目录


      Android Q即将推出正式版,本文是基于Q接近最终版本的beta6版本作为记录写的,如果对看到本文的人有帮助那当然是更好了。
       
       一、Android Q的私有目录
       这里的私有目录即是 App-specific 目录,具体路径大概是“内部存储设备/Android/data/com.项目包名/”下,这个私有目录:
       (1)APP 卸载在这里插入代码片后,数据会清除。
       (2)APP 访问自己的 App-specific 目录时无需任何权限。
       (3)可以使用FileProvider分享使用自己私有目录的文件。
       所以在沙盒化的Q系统下,在此目录处理文件不会造成垃圾文件对内部存储目录结构影响,卸载后还会自动清除具有很方便的“自消化”特性。在其目录内部        的文件操作和Q之前的版本一样,可以随意处理,这里就不做概述了。
       二、Android Q的公共目录
       公共目录有:Downloads、Documents、Pictures 、DCIM、Movies、Music、Ringtones 等。
       (1)公共目录下的文件在 APP 卸载后,不会删除。
       (2)APP 可以通过 SAF框架(System Access Framework)、MediaStore 接口访问其中的文件。
       (3)无法直接使用路径访问公共目录文件。
       交互示例:

    //复制沙盒私有文件到Download公共目录下
    public static void copyPrivateToDownload(Context context,String orgFilePath,String displayName){
        ContentValues values = new ContentValues();
        //values.put(MediaStore.Images.Media.DESCRIPTION, "This is a file");
        values.put(MediaStore.Files.FileColumns.DISPLAY_NAME, displayName);
        values.put(MediaStore.Files.FileColumns.MIME_TYPE, "text/plain");
        values.put(MediaStore.Files.FileColumns.TITLE, displayName);
        values.put(MediaStore.Images.Media.RELATIVE_PATH, "Download/Wintone");

        Uri external = MediaStore.Downloads.EXTERNAL_CONTENT_URI;
        ContentResolver resolver = context.getContentResolver();

        Uri insertUri = resolver.insert(external, values);
        //Log.i("Test--","insertUri: " + insertUri);

        InputStream ist=null;
        OutputStream ost = null;
        try {
            ist=new FileInputStream(new File(orgFilePath));
            if (insertUri != null) {
                ost = resolver.openOutputStream(insertUri);
            }
            if (ost != null) {
                byte[] buffer = new byte[4096];
                int byteCount = 0;
                while ((byteCount = ist.read(buffer)) != -1) {  // 循环从输入流读取 buffer字节
                    ost.write(buffer, 0, byteCount);        // 将读取的输入流写入到输出流
                }
                // write what you want
            }
        } catch (IOException e) {
            //Log.i("copyPrivateToDownload--","fail: " + e.getCause());
        } finally {
            try {
                if (ist != null) {
                    ist.close();
                }
                if (ost != null) {
                    ost.close();
                }
            } catch (IOException e) {
                //Log.i("copyPrivateToDownload--","fail in close: " + e.getCause());
            }
        }
    }


**文章正在更新中。。。**

标签:ost,MediaStore,values,insertUri,Pittkai,Android,null,目录
来源: https://blog.csdn.net/kai545/article/details/100556189

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有