Android之內置、外置SDCard
From:http://blog.csdn.net/u011290399/article/details/10363881
在项目中,发现通过Android提供的API获取外置SDCard的操作一直不能成功,一直没有太多的时间解决该问题
昨天週末,终于可以抽空研究了一下这个问题了
在网上搜索下,结果百度的搜索引擎怎麽搜索也未能给我满足需求的搜索结果
不过,搜索出的内置SDCard与外置SDCard互换操作给出了思路
先看看SDCard的路径:/storage/extSdCard、/storage/sdcard0、/storage/sdcard0/external-sdcard、/storage/external-sdcard等等路径
网络上给出的很多比较挫的方法:
1、通过Android的API获取其父路径的File对象,然后获得File对象内的文件路径字符串数组,遍历、寻找出外置SDCard路径,看上面给出的SDCard路径就发现不能完全实现
2、通过StorageManager类反射获得getVolumePaths的结果集,测试一部手机通过,不过没太多的保障
3、写死路径…… 尼玛,这个能是一个程序员说出的话,小爷当时看到都诅咒说出这句话的家伙
4、根据网上搜索出来外置、内置SDCard互换操作,想到是否可以读取vold.fstab文件,直接获得外置SDCard路径,结果发现好多手机上找不到vold.fstab文件……
虽然找不到vold.fstab文件,但是该文件内的信息还是存放在手机的内存中的,所以,方法就来了。
// private static String cmd = "mount";
private static String cmd = "cat /proc/mounts";
private static String format = "sdcard";
private static String sdCard = Environment.getExternalStorageDirectory().getAbsolutePath();
/**
* 獲取外置SDCard的絕對路徑
* @return
*/
public static String getExternalPath() {
BufferedReader read = null;
String external_SDCard = sdCard;
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec(cmd);
read = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = read.readLine()) != null) {
// if (line.toLowerCase().contains(format) && line.contains(".android-secure")) {
if (line.toLowerCase().contains(format)) {
String[] array = line.split(" ");
if (array != null && array.length >= 5) {
String temp = array[1].replace("/.android_secure", "");
if (!sdCard.equals(temp)) {
external_SDCard = temp;
}
}
}
}
} catch (Exception e) {
external_SDCard = sdCard;
e.printStackTrace();
} finally {
IOUtils.freeResource(read, null);
}
return external_SDCard;
}
Android之內置、外置SDCard的更多相关文章
- Android获取内置sdcard跟外置sdcard路径
Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标准接口. 2.得到上一级文件夹目录 3.得到该目录的所有文 ...
- Android-获取外置SDcard路径
Android手机支持SDcard.目前很多手机厂商把SDcard集成到手机中,当然有的手机同时也支持可插拔的SDcard.这就有了内置SDcard和位置SDcard之分.当手机同时支持内置和外置SD ...
- 关于华为x2中的外置SDCard的使用
一.前要 记录一下最近在开发生产过程中遇到的一个小问题.在使用x2的华为7寸平板时,由于需要大内存去录制视频,所以就使用X2自带的SDCard口,插入1个128G的SDCard卡.但是Android ...
- 第四章:Python基础の快速认识內置函数和操作实战
本課主題 內置函数介紹和操作实战 装饰器介紹和操作实战 本周作业 內置函数介紹和操作实战 返回Boolean值的內置函数 all( ): 接受一個可以被迭代的對象,如果函数裡所有為真,才會真:有一個是 ...
- android获取内置和外置SD卡路径 - z
本文将介绍Android真机环境下如何获取内置和外置SD卡路径. 测试环境:三星Note3,其他手机待测试... 所需权限(AndroidManifest.xml文件里) <uses-permi ...
- Android切换前后置摄像头并录制视频
项目需要对微信的视频模块也看了一下,在此就对这块进行了一个开发.首先给出效果图 首先给出java代码 /** * RecordActivity.java * 版权所有(C) 2013 * 创建:cui ...
- Android使用Linux mount获取SdCard存储文件夹
Android的智能手机各不同样.如今非常多Android智能手机都是自带存储,有的还带有扩展内存的Sdcard卡槽. 在Android开发中,非常多时候依据Android提供的获取SdCard存储方 ...
- android 怎样内置/预置/预编译文件(运行程序,应用程序,apk, jar, lib 等随意文件)到系统中
方法一: 如果要内置的软件名称为iperf.exe 1. 将iperf.exe放到Codebase的随意一个文件夹下(该文件夹必须可以在搜索Android.mk时被搜索到),比方system/ipe ...
- android中创建模拟器的 SDCard
在eclipse中安装了android环境后,可以直接创建AVD和sdcard的,windows->Android Virtual Device Manager,创建一个AVD时,可以同时创建s ...
随机推荐
- mysql numberic types ---- mysql 数值类型详解
编程语言中大多都有数据类型一说.虽然mysql 的sql 语句与标准sql 有别.但是宏观上看还是差不多的:下面我们说一下mysql数据库中的数值类型 一.在mysql里有那些类型可以表示数值: 1. ...
- 18. Subsets II【medium】
Given a list of numbers that may has duplicate numbers, return all possible subsets Notice Each elem ...
- 02、Unicode 汉字转码小工具
在做 Windows app 的时候,与服务器端交互使用的是 json 格式的数据,里面的汉字内容被 编码成 unicode 格式,在调试的时候不太方便,就写了个工具,把里面的 unicode 内容转 ...
- map area 标签的使用
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- layui的点击table行选中复选框
$(document).on("click",".layui-table-body table.layui-table tbody tr",function() ...
- MUTT+MSMTP利用163服务器发送邮件
监控系统发送告警邮件,我们自己搭建邮件服务器,成本较高,所以可以使用163等第三方MTA帮助我们发送.MUTT+MSMTP是一个很好的选择,具体实现如下: tar -xvf msmtp-1.6.5.t ...
- android bitmap compress
android的照相功能随着手机硬件的发展,变得越来越强大,能够找出很高分辨率的图片. 有些场景中,需要照相并且上传到服务,但是由于图片的大小太大,那么就上传就会很慢(在有些网络情况下),而且很耗流量 ...
- 巧用set比较大小,缩短时间复杂度
struct Node { long long a; long long b; long long c; long long num; int i; bool operator < (const ...
- js数组最大值和最小值计算
基本概念 reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值. reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被 ...
- js去掉双引号
替换: d = d.replace("\"","").replace("\"",""); 全部替换: ...