Android获取系统外置存储卡路径的方法

android系统可通过Environment.getExternalStorageDirectory()获取存储卡的路径,但是现在有很多手机内置有一个存储空间,同时还支持外置sd卡插入,这样通过Environment.getExternalStorageDirectory()方法获取到的就是内置存储卡的位置,需要获取外置存储卡的路径就比较麻烦,这里借鉴网上的代码,稍作修改,在已有的手机上做了测试,效果还可以,当然也许还有其他的一些奇葩机型没有覆盖到。

package com.example.getpath;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		getPath2();
	}

	@SuppressLint("SdCardPath")
	public String getPath2() {
		String sdcard_path = null;
		String sd_default = Environment.getExternalStorageDirectory()
				.getAbsolutePath();
		Log.d("text", sd_default);
		if (sd_default.endsWith("/")) {
			sd_default = sd_default.substring(0, sd_default.length() - 1);
		}
		// 得到路径
		try {
			Runtime runtime = Runtime.getRuntime();
			Process proc = runtime.exec("mount");
			InputStream is = proc.getInputStream();
			InputStreamReader isr = new InputStreamReader(is);
			String line;
			BufferedReader br = new BufferedReader(isr);
			while ((line = br.readLine()) != null) {
				if (line.contains("secure"))
					continue;
				if (line.contains("asec"))
					continue;
				if (line.contains("fat") && line.contains("/mnt/")) {
					String columns[] = line.split(" ");
					if (columns != null && columns.length > 1) {
						if (sd_default.trim().equals(columns[1].trim())) {
							continue;
						}
						sdcard_path = columns[1];
					}
				} else if (line.contains("fuse") && line.contains("/mnt/")) {
					String columns[] = line.split(" ");
					if (columns != null && columns.length > 1) {
						if (sd_default.trim().equals(columns[1].trim())) {
							continue;
						}
						sdcard_path = columns[1];
					}
				}
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Log.d("text", sdcard_path);
		return sdcard_path;
	}
}
时间: 2024-10-25 10:01:08

Android获取系统外置存储卡路径的方法的相关文章

Android获取系统时间方法详解

Android获取系统时间方法的方法有很多种,常用的有Calendar.Date.currentTimeMills等方法. (1)Calendar Calendar获取系统时间首先要用Calendar.getInstance()函数获取一个实例,再为该实例设定时区(中国的时区为GMT+8:00),最后使用Calendar.get()函数获取时间的具体信息,如年,月,日,小时,分,秒,星期几. package com.hzhi.time_example; import java.util.Cale

Android 获取系统的联系人

本文主要介绍android中怎样获取系统的联系人数据 首先打开模拟器 点击联系人图标按钮 说明系统联系人数据库是空的,打开File explorer,找到data/data下面的文件夹: 将contacts2.db文件导出,添加到sqlite中的时候报错: 点击“ok”忽略之 表结构相当的复杂,首先搞清楚其中的三张表 * data表 保存联系人的数据 * raw_contacts表 保存联系人的id contact_id * mimetypes表 保存联系人数据的类型 接下来通过模拟器添加联系人

Android 获取系统相册中的所有图片

Android 提供了API可获取到系统相册中的一些信息,主要还是通过ContentProvider 来获取想要的内容. 代码很简单,只要熟悉ContentProvider 就可以了. public static List<String> getSystemPhotoList(Context context) { List<String> result = new ArrayList<String>(); Uri uri = MediaStore.Images.Medi

Android获取系统ID(com.android.internal.R)

R.id.icon 怎么获取,这个东西其实在 com.android.internal.R 这个里面,但是这个类我们访问不到怎么办? 反射呗, Java 的反射可谓是万能啊,啥都可以拿到只要他在. [java] view plaincopy Class<?> clazz = Class.forName("com.android.internal.R$id"); Field field = clazz.getField("icon"); field.set

VC 获取指定文件夹路径的方法小结

VC获取指定文件夹路径 flyfish  2010-3-5 一 使用Shell函数 1 获取应用程序的安装路径 TCHAR buf[_MAX_PATH];SHGetSpecialFolderPath(NULL,buf,CSIDL_PROGRAM_FILES,NULL);AfxMessageBox(buf); 2 获取应用程序数据路径的文件夹 TCHAR bufApplicateData[_MAX_PATH];SHGetSpecialFolderPath(NULL,bufApplicateData

Android 获取系统或SDCARD剩余空间信息(转)

android.os下的StatFs类主要用来获取文件系统的状态,能够获取sd卡的大小和剩余空间,获取系统内部空间也就是/system的大小和剩余空间等等.      看下读取sd卡的:Java代码 1 void readSDCard() { 2 String state = Environment.getExternalStorageState(); 3 if(Environment.MEDIA_MOUNTED.equals(state)) { 4 File sdcardDir = Envir

关于获取系统特殊文件夹的方法

一.获取当前文件的路径1.   System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName     获取模块的完整路径,包括文件名.2.   System.Environment.CurrentDirectory     获取和设置当前目录(该进程从中启动的目录)的完全限定目录.3.   System.IO.Directory.GetCurrentDirectory()     获取应用程序的当前工作目录.这个不一定是程序

获取沙盒中路径的方法

1,获取家目录路径的函数: NSString *homeDir = NSHomeDirectory(); 2,获取Documents目录路径的方法: NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docDir = [paths objectAtIndex:0]; 3,获取Caches目录路径的方法: NSArray *paths

android获取系统wifi状态等

WIFI 获取WIFI状态 WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); if(wifiManager != null){ int wifiState = wifiManager.getWifiState(); } 附:Wifi状态有以下几种:(括号内为所对应的的int值) 1. wifiManager.WIFI_STATE_DISABLED (1) 2. wifiMa