安卓10.0文件操作

2024-06-22 13:38
文章标签 安卓 10.0 操作

本文主要是介绍安卓10.0文件操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/**
 *
 * app文件分为专属文件和独立文件;
 * 手机存储分内部存储(手机存储,如4G,8G内存) 和外部存储(SD拓展卡,如64G,128G)
 * 专属文件是那些只有该app才可以使用的文件,例如数据库,sharedpreference,专属格式的电子书等;专属文件可存于内部和外部存储;专属文件会随APP卸载而删除.
 * 独立文件是那些不依赖于某特定app的文件,例如照片,视频,apk等;独立文件可存于内部和外部存储;独立文件不应该随APP卸载而卸载.
 *
 * 在安卓10.0之后不建议使用Environment.getExternalStorageDirectory()方法1,推荐使用context.getExternalFilesDir()方法2;
 * 10.0后方法1能访问,但是无法创建自定义的文件夹;方法2创建的文件夹都是在/storage/emulated/0/Android/data/packageName/files下,会随应用卸载被删除;
 * 想要在外部存储创建自定义文件夹就只能把targetSDK设置到28及以下,并使用方法1获取目录并创建自定义文件夹.
 *
 * 此方法测试时,targetSDK=27
 */
private void testDirector() {
    final String privilegePath1 = Utils.getContext().getFilesDir().getAbsolutePath();
    final String privilegePath2 = Utils.getContext().getExternalFilesDir(null).getAbsolutePath();
    final String privilegePath3 = Utils.getContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
    final String privilegePath4 = Utils.getContext().getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS).getAbsolutePath();

    final String privilegePath5 = Environment.getExternalStorageState();
    final String privilegePath6 = Environment.getRootDirectory().getAbsolutePath();
    final String privilegePath7 = Environment.getDataDirectory().getAbsolutePath();
    final String privilegePath8 = Environment.getDownloadCacheDirectory().getAbsolutePath();
    final String privilegePath9 = Environment.getStorageDirectory().getAbsolutePath();

    final String privilegePath10 = Environment.getExternalStorageDirectory().getAbsolutePath();
    final String privilegePath11 = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath();
    final String privilegePath12 = Environment.getStorageState(null);

    LogUtil.logInfo("aaa",
            "path1=" + privilegePath1 + ";" +
                    "path2=" + privilegePath2 + ";" +
                    "path3=" + privilegePath3 + ";" +
                    "path4=" + privilegePath4 + ";" +
                    "path5=" + privilegePath5 + ";" +
                    "path6=" + privilegePath6 + ";" +
                    "path7=" + privilegePath7 + ";" +
                    "path8=" + privilegePath8 + ";" +
                    "path9=" + privilegePath9 + ";" +
                    "path10=" + privilegePath10 + ";" +
                    "path11=" + privilegePath11 + ";" +
                    "path12=" + privilegePath12 + ";" +
                    "pathAppCache=" + Constant.APP_CACHE_ROOT_PATH);
    /**
     * 打印结果
     * path1=/data/user/0/com.yuwj.modulepatternjwt/files;
     * path2=/storage/emulated/0/Android/data/com.yuwj.modulepatternjwt/files;
     * path3=/storage/emulated/0/Android/data/com.yuwj.modulepatternjwt/files/Download;
     * path5=mounted;
     * path6=/system;
     * path7=/data;
     * path8=/data/cache;
     * path9=/storage;
     * path10=/storage/emulated/0;
     * path12=unknown;
     * pathAppCache=/data/user/0/com.yuwj.modulepatternjwt/files/ModulePatternJWT/
     */
}


==================================================    
==================================================    
==================================================
 /**
     * fileprovider的使用方法,参见https://www.jianshu.com/p/bce6a4c779dd
     * 1. 在manifest的application中定义provider
     * 2. 创建对应的xml/filepath.xml文件,编辑内容
     * 3. 在读取文件时,需要将文件的绝对路径转化为FileProvider提供的URI.
     * 4. filepath.xml说明
     * <root-path/> 代表设备的根目录new File("/");
     * <files-path/> 代表context.getFilesDir()
     * <cache-path/> 代表context.getCacheDir()
     * <external-path/> 代表Environment.getExternalStorageDirectory()
     * <external-files-path>代表context.getExternalFilesDirs()
     * <external-cache-path>代表getExternalCacheDirs()
     * path表示相对于<external-files-path>的子目录
     * name表示将代替<external-files-path>+path对应的目录,使调用者不清楚实际文件路径
     */
    
    
    
    <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepath" />
        </provider>
        
        ============================1=============================
        
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <paths>
        <external-files-path
            name="files"
            path="" />
    </paths>
</resources>

        ============================2=============================
        
        public static void installApk(Context context, String apkPath) {
        File file = new File(apkPath);
        boolean i = file.exists();
        if(Build.VERSION.SDK_INT>=24) {//判读版本是否在7.0以上
            //参数1 上下文, 参数2 Provider主机地址 和配置文件中保持一致   参数3  共享的文件
            Uri apkUri = FileProvider.getUriForFile(context, context.getPackageName()+".provider", file);//在AndroidManifest中的android:authorities值
            Intent install = new Intent(Intent.ACTION_VIEW);
            // 由于没有在Activity环境下启动Activity,设置下面的标签
            install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            //添加这一句表示对目标应用临时授权该Uri所代表的文件
            install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            install.setDataAndType(apkUri, "application/vnd.android.package-archive");
            context.startActivity(install);
        } else{
            Intent install = new Intent(Intent.ACTION_VIEW);
            install.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
            install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(install);
        }
    }
    ============================3=============================
 

这篇关于安卓10.0文件操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084447

相关文章

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

SQL Server中,always on服务器的相关操作

在SQL Server中,建立了always on服务,可用于数据库的同步备份,当数据库出现问题后,always on服务会自动切换主从服务器。 例如192.168.1.10为主服务器,12为从服务器,当主服务器出现问题后,always on自动将主服务器切换为12,保证数据库正常访问。 对于always on服务器有如下操作: 1、切换主从服务器:假如需要手动切换主从服务器时(如果两个服务

JavaWeb系列二十: jQuery的DOM操作 下

jQuery的DOM操作 CSS-DOM操作多选框案例页面加载完毕触发方法作业布置jQuery获取选中复选框的值jQuery控制checkbox被选中jQuery控制(全选/全不选/反选)jQuery动态添加删除用户 CSS-DOM操作 获取和设置元素的样式属性: css()获取和设置元素透明度: opacity属性获取和设置元素高度, 宽度: height(), widt

PS的一些操作~持续抄袭中....

套索工具使用时移动图片——按住空格键,鼠标左键按住,拖动!

帆软报表常用操作

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 帆软报表常用操作 多序号实现使用数据集作为参数空白页或者竖线页修改页面Title金额,或者保留两位小数等等设置日期格式显示图片使用公式 多序号实现 所用函数为SEQ(),如果一张报表中需要用到多个序号,那么就需要加入参数SEQ(1),SEQ(

el-upload 上传图片及回显照片和预览图片,文件流和http线上链接格式操作

<div v-for="(info, index) in zsjzqwhxqList.helicopterTourInfoList" :key="info.id" >编辑上传图片// oss返回线上地址http链接格式:<el-form-itemlabel="巡视结果照片":label-width="formLabelWidth"><el-upload:action="'http:

Git代码管理的常用操作

在VS022中,Git的管理要先建立本地或远程仓库,然后commit到本地,最后push到远程代码库。 或者不建立本地的情况,直接拉取已有的远程代码。 Git是一个分布式版本控制系统,用于跟踪和管理文件的变化。它可以记录文件的修改历史,并且可以轻松地回滚到任何历史版本。 Git的基本概念包括: 仓库(Repository):Git使用仓库来存储文件的版本历史。一个仓库可以包含多个文件

最新版本的JDK安装和配置(Java SE 10.0.2)

1.废话少说,要么百度JDK,要么直接点传送门http://www.oracle.com/technetwork/java/javase/downloads/index.html。这里需要说的JDK包含JRE,打个比方,JDK就是厨房,包含各种工具,而JRE是运行环境,就是锅。所以下载的话,直接下载最新JDK最好。然后根据你的系统位数选择版本。我的是64bit. 2.点击1的右边中间的【JD

高性能MYsql读书笔记-加快alter table操作的速度

alte tabe 会导致事务中断。 方法1  使用 alter column 代替 modify column  方法2  不推荐。。 ALTER TABLE      [  ALTER COLUMN    / MODIFY COLUMN  /  CHANGE COLUMN  ] ALTER TABLE sakila.film MODIFY COLUMN rental