Android存储路径

Android 获取OTG U盘路径 sdcard路径 Android M 读取OTG U盘路径和sdcard路径demo , 第三方apk可以参考使用。摘要为什么要50个字,为什么呢? 立即下载

获得存储卡路径都会用到这个方法:

Environment.getExternalStorageDirectory()
但有些手机的TF卡路径会读不到或者读错。

下面提供一个较好的方法。

三个方法都在StorageManager类中。在使用之前我们需要将其方法反射出来,因为这些方法对外是隐藏的。


String[] getVolumePaths():

返回全部的存储路径,包括内置存储、外置存储和其他挂载路径。要判断某个挂载点的状态就需要用第三个方法。


StorageVolume[] getVolumeList():

会返回如上一个StorageVolume的对象数组,每个存储点的详细数据都在对象中。


String getVolumeState(String mountPoint):

返回以下特定存储点的状态(不止以下状态),没有插入TF卡是会返回 REMOVED 状态。

/**
 * Unknown storage state, such as when a path isn't backed by known storage
 * media.
 *
 * @see #getExternalStorageState(File)
 */
public static final String MEDIA_UNKNOWN = "unknown";

/**
 * Storage state if the media is not present.
 *
 * @see #getExternalStorageState(File)
 */
public static final String MEDIA_REMOVED = "removed";

所以,在手机又TF卡插槽的情况下,无论是否插入TF卡,该返回数组中都会返回TF卡存储路径。所以需要对这些路径进行查看状态在Environment.MEDIA_MOUNTED或Environment.MEDIA_MOUNTED_READ_ONLY。在数组中不止两条数据(第一条是主存,第二条是TF卡),在我的三星手机上会有一个Private的路径返回,需要额外注意:

06-13 10:36:08.418 10993-10993/com.example.test.gifdemo2 E/path: /storage/emulated/0
06-13 10:36:08.418 10993-10993/com.example.test.gifdemo2 E/path: /storage/72AD-2013
06-13 10:36:08.418 10993-10993/com.example.test.gifdemo2 E/path: /storage/Private


之后就需要通过反射,得到隐藏方法并返回数据,下面就开始贴代码:

// 获取主存储卡路径
public String getPrimaryStoragePath(Context context) {
    try {
        StorageManager sm = (StorageManager) context.getSystemService(context.STORAGE_SERVICE);
        Method getVolumePathsMethod = StorageManager.class.getMethod("getVolumePaths", null);
        String[] paths = (String[]) getVolumePathsMethod.invoke(sm, null);
        // first element in paths[] is primary storage path
        return paths[0];
    } catch (Exception e) {
        Log.e("ERROR", "getPrimaryStoragePath() failed", e);
    }
    return null;
}

// 获取次存储卡路径,一般就是外置 TF 卡了. 不过也有可能是 USB OTG 设备
public String getSecondaryStoragePath(Context context) {
    try {
        StorageManager sm = (StorageManager) context.getSystemService(context.STORAGE_SERVICE);
        Method getVolumePathsMethod = StorageManager.class.getMethod("getVolumePaths", null);
        String[] paths = (String[]) getVolumePathsMethod.invoke(sm, null);
        // second element in paths[] is secondary storage path
        return paths.length <= 1 ? null : paths[1];
    } catch (Exception e) {
        Log.e("ERROR", "getSecondaryStoragePath() failed", e);
    }
    return null;
}

// 获取存储卡的挂载状态. path 参数传入上两个方法得到的路径  
public String getStorageState(Context context, String path) {
    try {
        StorageManager sm = (StorageManager) context.getSystemService(context.STORAGE_SERVICE);
        Method getVolumeStateMethod = StorageManager.class.getMethod("getVolumeState", new Class[] {String.class});
        String state = (String) getVolumeStateMethod.invoke(sm, path);
        return state;
    } catch (Exception e) {
        Log.e("ERROR", "getStorageState() failed", e);
    }
    return null;
}


android通过反射获取内置存储、SD、OTG盘的路径,适合三方apk存储查看与文件管理 由于不同厂商定制,挂载存储路径并不统一,并且VolumeInfo需要源码环境,这里提供一个类,通过反射机制轻松获取外挂磁盘的路径和类别(判断是否SD\OTG),并获取对硬盘的空间大小情况 立即下载

相关推荐

GIS国土工具实战:从地类分析到坐标转换,一站式解决项目难题

本文详细介绍了GIS国土工具在国土整治项目中的高效应用,涵盖地类分析、坐标转换、影像加载等核心功能。通过实战案例展示如何利用该工具快速处理shp与txt文件转换、智能比对三调二调数据,以及优化影像加载策略,显著提升项目效率。特别适合需要处理复杂国土数据的专业人员使用。

weixin_28732953的博客 335

Android获取内置、外置以及OTG等方式挂载的存储设备路径

众所周知,谷歌提供给了我们获取android内置存储卡的绝对路径的方法,但是如果要获取外置的存储的路径的话,谷歌就没有提供了。我们需要自己去写方法来获取这些路径,比如外置的tf卡,OTG挂载的U盘等。 那么采用什么方法呢,android说白了也就是一种linux系统,采用的是linux的内核。而linux中挂载存储设备使用的是 mount 命令来挂载设备到文件系统中。如: mount -rw

弹指歌 1万+

暗黑地牢modfiles.txt文件生成工具

暗黑地牢modfiles.txt文件生成工具引言方法工具源码基本步骤 引言 玩过暗黑地牢mod,并手动修改了mod中文件的话,如果不同步修改modfiles.txt文件,就会引起各种问题,典型的比如马车刷不出mod英雄,商店和boss都不再出现mod饰品,怪物贴图丢失出现黑块等,要解决这个问题,就要修正mod文件夹下的modfiles.txt文件 方法 针对修改量大小,一般有几种方法: 如果修改较少,而且你还记得修改了哪几个文件,找到这几个文件,右键属性,查看大小,要用的是括号里面的字节数,然后打开mod

lttclaw_的专栏 5007

Android获取拓展外置SD卡(可插拔)路径及读写外置SD卡的方法

有需求做一些类似文件管理器的,就会用到获取外置可移动SD卡的路径。一般的通过Environment或者Context获取的都是手机自带的存储卡路径,类似storage/emulated/0/加后缀。由于谷歌之后的意思是像ios一样,不支持外置USB或者外置可移动SD存储。但是国内的厂商一般都支持。先大概分个类,6.0以下的使用方法一,6.0以上的使用方法二。 Android10 三星S10亲测如...

dodod2012的专栏 3121

Globus 数据下载

Globus 大数据下载流程~

weixin_43978558的博客 6645

企业微信自建应用全流程部署指南:从HTTPS到API调试

本文提供了一份详尽的企业微信自建应用部署指南,涵盖从HTTPS域名配置、Nginx反向代理到企业微信后台应用创建与API调试的全流程。核心在于构建一个符合企业微信安全要求的“可信”服务环境,并利用JupyterLab等工具进行高效调试,帮助企业快速完成内部系统与企业微信的集成。

weixin_29247219的博客 425

Android实践: Android13 读取外置SD卡

在Android开发中,随着应用功能的日益复杂,处理大量用户数据的需求也随之增加。特别是当这些数据存储在外部SD卡上时,如何高效地读取和写入这些数据成为了开发者们必须面对的问题。本文将深入探讨在Android 13系统中如何读取外置SD卡,通过详细的步骤和代码示例,帮助开发者们实现这一功能。

孔乙己大叔的博客 3433

【学习体会】Lighttools8.4.0:矩形阵列光源+条形光源的光学仿真分析

在solidworks中设计了条形光源的基本结构: 由32*6个矩形led组成矩形光源阵列,如下所示 另存为step文件后,导入lighttools中,这里要设置模型的光学属性为:吸收体(机械) 因为我们设计的光源模型是一个整体,我们不能单个面的设置光源,比如说, 这样做的话并不会是这个面设置为光源,而是会把做一个模型都变成一个光源,如下 这显然不是我们想要的 那么,我们就在led位置上放置一个矩形面光源, 这样我们就放置好了一个面光源, 但是问题是,还有191...

LeonJin的博客 1万+

Android 关于外部存储设备挂载路径获取问题

最近遇到了需要获取外部存储设备挂载路径的问题,在这里记录一下学到的方法。 一、注册监听 1、如果是监听activity广播在其oncreate方法里要这样写 IntentFilter iFilter = new IntentFilter(); iFilter.addAction(Intent.ACTION_MEDIA_EJECT); iFilter.a

wo2499126481的博客 2830

oh-my-zsh详细安装与主题插件配置

使用Linux的小伙伴都知道默认shell是bash,但是对于喜欢折腾,喜欢酷炫的我们bash怎能够用。zsh的作为一种shell,功能更强大,但是配置复杂。后来,有大佬创建了一个名为oh-my-zsh的开源项目,使用方便,功能强大。 下面就去oh-my-zsh的配置。 ①安装zsh 想要安装oh-my-zsh,首先得安装zsh,输入命令 sudo apt-get install zsh 界面如下 ②查看是否安装成功 输入命令 zsh --version 可以查看安装zsh的版本..

惜洛-Jankin的博客 2万+

SquareLine Studio汉化版安装激活全攻略:LVGL嵌入式UI设计从入门到出代码

嵌入式GUI开发中,LVGL作为轻量级开源图形库,广泛应用于STM32、ESP32等MCU平台。可视化设计器通过拖拽生成LVGL代码,大幅提升UI开发效率。SquareLine Studio正是这类工具的代表,支持界面设计、事件绑定与代码导出。其安装、汉化与激活是初学者常见门槛,尤其涉及LVGL版本匹配、字体配置及FreeRTOS移植等关键环节。本文围绕汉化版安装、一个月免费激活码使用及最小可用流程展开,帮助开发者快速上手LVGL界面设计,规避常见环境与集成问题。

weixin_29189987的博客 429

Android获取所有的存储设备信息(包括外接USB存储)

【代码】Android获取所有的存储设备信息(包括外接USB存储)

Gary__123456的博客 1132

华为 MetaERP 总账模块依托 “交易即核算” 的事件驱动架构,与 Oracle EBS 相比,更强调业务事件自动触发财务动作、实时数据同步和智能规则引擎,实现业务与财务的深度融合

华为MetaERP总账模块采用"交易即核算"架构,相比Oracle EBS实现了三大突破:1)业务事件自动触发财务动作,如采购收货自动生成暂估凭证;2)业务财务数据实时同步,支持即时分析;3)内置智能规则引擎,实现自动匹配、核销和结转。该模块覆盖采购、销售、资产、薪酬等全业务场景,支持多维核算和关联交易自动抵消,显著提升核算效率与准确性。其中采购暂估、销售结转等场景实现全自动化处理,较EBS减少80%手工操作。

金牌架构师 226

android读取存储文件路径,安卓获取存储文件路径

首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己的应用的内部存储路径下。所有内部存储中保存的文件在用户卸载应用的时候会被删除。一、 files1. Context.getFilesDir(),该方法返回/data/data/youPackageName/files的File对象。2. Context.openFileInput()与Contex...

weixin_35941667的博客 1695

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

安卓 linux找回内置存储,Android中的存储路径之内部存储

在Android中,你是不是只会在根目录下存文件?靠着一行代码走天下:String absolutePath = Environment.getExternalStorageDirectory().getAbsolutePath();很多人搞不明白Android中的存储路径,我们大概只知道内部存储和外部存储,然而这两个路径究竟在哪里?什么路径需要权限,什么路径不需要权限?Android到底给我们准...

weixin_30873127的博客 388

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android 存储路径

​​Dalvik 缓存​​:/data/dalvik-cache(优化后的 DEX 文件,影响 stats.codeSize)。​​当前配置​​:/data/misc/profiles/cur/0/com.example.test。​​参考配置​​:/data/misc/profiles/ref/com.example.test。

fukaiqiang 4351

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

安卓 linux找回内置存储,Android手机自带内部存储路径的获取

我有一台中兴的Android手机,型号是 ZTE U930HD,手机没有插入外置SD卡(也就是Micro SD Card,原名Trans-flash Card(TF卡),2004年正式更名为Micro SD Card),但是机身自带了一个内置存储卡(也就是eMMC存储,大小为2G)。我把这个手机用数据线插到电脑上,也会看到盘符,通过安装「R.E 管理器」等文件管理应用,也可以管理文件,并且能看到该...

weixin_29438011的博客 272

android 图片存储路径设置在哪里,Android 文件存储路径-内部/外部存储

一、内存、内部存储、外部存储概述4.4以下,机身存储就是内部存储,外部存储就是SD卡。我们通过getDataDirectory就可以获取内部存储根路径,通过getExternalStorageDirectory就可以获取外置SD卡根路径。4.4以上,机身存储包含内部存储和内置的外部存储,外部存储包含两部分内置的外部存储和SD卡,其中通过getExternalStorageDirectory获取的是...

weixin_34125509的博客 2万+

安卓文件存储路径

Android中内部存储,外部存储的概念 (1)内部存储 概念:注意内部存储不是内存。内部存储位于系统中很特殊的一个位置,如果你想将文件存储于内部存储中,那么文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。也就是说应用创建于内部存储的文件,与这个应用是关联起来的。当一个应用卸载之后,内部存储中的这些文件也被删除。从技术上来讲如果你在创建内部存储文件的时候将文件属...

weixin_45830683的博客 1283

转:彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑

转自:https://blog.youkuaiyun.com/u010937230/article/details/73303034 前言: 对于任何一个应用来说,无论是PC端应用还是Android应用,存储肯定是必不可少的。对于很多做Android开发的同学来说,可能认为文件存储很简单,调用一些诸如getFilesDir,getExternalStorageDirectory方法行了,但是虽然说它们会调用相...

shijx190221的博客 534

android路径格式,安卓各文件存储路径汇总(Android file path)

Environment.getDataDirectory() = /dataEnvironment.getDownloadCacheDirectory() = /cacheEnvironment.getExternalStorageDirectory() = /mnt/sdcardEnvironment.getExternalStoragePublicDirectory(“test”) = /mn...

weixin_39689622的博客 626

Android 本地存储路径说明

该目录主要用于存放缓存文件,当系统的内存存储空间紧张时,该目录下的文件会被删除掉。关于这些文件究竟会在存储空间剩余多少的情况,没有严格的标准保障。注意:你不应该依赖系统来清理这些缓存文件,你应该对这些缓存文件占用的最大存储空间设定个最大值,比如是1M,当实际占用空间超过这个值时,你应该对这些缓存文件做相应的清理工作。注: 目录中的文件,会在卸载你的应用程序时被删除掉。

以后会多把工作中总结的知识、问题处理思路和方法通过博客分享出来,欢迎大家关注和共同探讨! 1975

Android存储路径大全

Android的存储路径实际分类为1)内部存储路径2)内部缓存存储路径3)外部存储路径4)外部缓存存储路径在有些手机上,系统也会在内部划出一个内部的SDCard路径和内部存储路径,所以当有SDCard的时候,就会有6个路径存在了那么存储路径和缓存存储路径的区别就是:1、缓存路径一般用于存放一些缓存数据,当程序删除的时候,缓存文件夹也会随之删除,避免了程序在卸载之后残留大量文件。

顺其自然~专栏 3630
上一篇: Android蓝牙搜索三星手机找不到设备
下一篇: 蓝牙功能框架
羊羊爱代码
博客等级 码龄11年 8粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值