`
yangwei0915
  • 浏览: 465185 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

android 获取sd卡路径的两种方法

 
阅读更多
/**
	 * 方法一
	 * @return
	 */
	public String getSDPath1() {
		File sdDir = null;
		boolean sdCardExist = Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED); // 判断sd卡是否存在
		if (sdCardExist) {
			sdDir = Environment.getExternalStorageDirectory();// 获取跟目录
			return sdDir.toString();
		} else {
			return null;
		}

	}

 

 

1、API>=23 时方法一无效(暂未测试)

2、有些厂商的Rom改动太多,对相关原生API的支持存在问题,这时方法一可能会存在问题。

方法二

public String getSDPath() {
		String path;
		path=getStoragePath(context,false);
		if(path==null){
			path=getStoragePath(context,true);
		}
		return path;
	}
	/**
	 * 获取内部存储和外部存储(内外sd卡)的路径,
	 * 参数 is_removable为false时得到的是内置sd卡路径,为true则为外置sd卡路径。
	 * @param mContext
	 * @param is_removale
	 * @return
	 */
	private static String getStoragePath(Context mContext, boolean is_removale) {  

	      StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);
	        Class<?> storageVolumeClazz = null;
	        try {
	            storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");
	            Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");
	            Method getPath = storageVolumeClazz.getMethod("getPath");
	            Method isRemovable = storageVolumeClazz.getMethod("isRemovable");
	            Object result = getVolumeList.invoke(mStorageManager);
	            final int length = Array.getLength(result);
	            for (int i = 0; i < length; i++) {
	                Object storageVolumeElement = Array.get(result, i);
	                String path = (String) getPath.invoke(storageVolumeElement);
	                boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement);
	                if (is_removale == removable) {
	                    return path;
	                }
	            }
	        } catch (ClassNotFoundException e) {
	            e.printStackTrace();
	        } catch (InvocationTargetException e) {
	            e.printStackTrace();
	        } catch (NoSuchMethodException e) {
	            e.printStackTrace();
	        } catch (IllegalAccessException e) {
	            e.printStackTrace();
	        }
	        return null;
	}

 

分享到:
评论

相关推荐

    Android获取外置SD卡路径

    在Android API中,`Environment`类提供了对外部存储的访问接口,如`getExternalStorageDirectory()`方法返回内置的外部存储根目录,但这并不总是指向真正的外置SD卡。因此,如果需要获取外置SD卡的路径,通常需要...

    Android 获取内外SD卡路径几种方法总结

    本文将总结两种在Android系统中获取内外SD卡路径的方法。 首先,我们来看第一种方法,这是较为简单直接的方式,通常适用于大部分场景: 1. **获取内置SD卡路径**: 可以通过调用`System.getenv("EXTERNAL_STORAGE...

    Android 获取内外置存储卡

    本文将深入探讨如何在Android平台上获取内外置存储卡的相关信息,包括路径、判断其是否存在以及如何加载SD卡。 首先,我们要了解Android设备的存储结构。Android系统通常包含两种类型的存储:内部存储(Internal ...

    Android获取SD卡路径及SDCard内存的方法

    首先,我们来了解一下获取SD卡路径的两种常见方法: 1. **硬编码路径**: ```java private String folder = "/sdcard/DCIM/Camera/"; // 不推荐 ``` 这种方式直接写死SD卡路径,虽然简单,但并不适用于所有设备...

    获取sd卡路径

    在本篇文章中,我们将深入探讨如何使用一种新颖的方法来获取Android设备上的SD卡路径,这种方法与传统的做法有所不同,最大的特点是无需在AndroidManifest.xml文件中声明额外的权限。 ### 一、背景介绍 在Android...

    android 读取外置和内置存储卡路径和大小

    在Android系统中,读取外置和内置存储卡的路径以及获取它们的大小是常见的需求,尤其是在处理多媒体文件或者管理应用程序数据时。本教程将详细解释如何实现这一功能。 首先,我们要了解Android对存储卡的分类。在...

    获取SD卡路径及手机存储路径

    Android设备通常有两种类型的存储空间:内部存储(Internal Storage)和外部存储(External Storage),通常所说的SD卡就是外部存储的一部分。在Android 6.0(API级别23)之后,对存储访问有了更严格的权限管理,...

    Android 通过反射调用获取内置存储和外置sd卡根路径(适用于各个版本)

    在API级别17及以上,可以使用`Environment.getExternalStorageDirectory()`方法获取外部存储的根目录,但请注意,这可能返回内部存储而非真正的外部SD卡。为了获取内置存储的根路径,我们可以使用如下代码: ```...

    Android U盘读写 反射获取U盘路径

    Android设备通常有两种类型的存储:内部存储和外部存储。内部存储是设备自身的存储空间,而外部存储包括SD卡和通过OTG连接的U盘。在Android 6.0(API级别23)及更高版本,用户需要在运行时授予读写外部存储的权限(`...

    Android N获取外置SD卡或挂载U盘路径的方法

    在Android N上并没有提供直接的方法获取外置SD卡或挂载U盘路径,可以通过下面方法获取内置sd卡路径 Environment.getExternalStorageDirectory().getAbsolutePath(); 通过查看getExternalStorageDirectory源码发现,...

    安卓SD卡文件管理更新信息相关-android读取外置和内置存储卡路径和大小.rar

    在Android系统中,管理和操作文件,尤其是涉及到SD卡(外置和内置存储卡)的文件操作,是开发者经常面临的一项任务。这篇资料主要探讨的是如何在Android应用中获取SD卡的路径以及计算其存储大小。以下是一些关键知识...

    android 内部存储读写 sd卡存储

    本篇文章将主要探讨Android中的内部存储与外部存储之一——SD卡存储的基本概念、特点及其使用方法。 #### 二、Android内部存储 Android内部存储指的是应用自身的私有存储空间,通常位于`/data/data/&lt;package name&gt;...

    Android判断获取内置外置sd卡demo

    标题“Android判断获取内置外置sd卡demo”暗示我们将关注如何在Android应用中识别并访问这两种类型的存储。下面是一些关键的API和方法: 1. **获取内部存储路径**: - `Context.getFilesDir()`:返回应用程序私有...

    获取手机设备存储路径

    本篇将详细介绍如何在Android应用中获取这两种存储路径,并讨论其兼容性问题。 首先,Android设备通常有两个主要的存储区域:内部存储(Internal Storage)和外部存储(External Storage)。内部存储通常较小,用于...

    Android应用源码之判断双SD卡_CheckDoubleSDCard-IT计算机-毕业设计.zip

    1. **获取SD卡路径**:Android提供`Environment.getExternalStorageDirectory()`方法来获取外部存储的根目录,但这通常只返回第一张SD卡的路径。在Android 6.0(API级别23)及以上版本,需要动态请求`WRITE_EXTERNAL...

    android demo,sd卡文件存储和data下文件存储。

    下面将详细介绍这两种方法及其应用场景。 **1. SD卡文件存储** SD卡文件存储通常用于存储大容量的数据,如多媒体文件、缓存文件或用户生成的文件。Android提供了`Environment`类来获取SD卡(外部存储)的相关路径...

    android sd卡文件浏览

    在Android中,可以使用`Environment.getExternalStorageDirectory()`方法获取到SD卡的根目录。然后,我们可以使用`java.io.File`类来遍历目录中的文件和子目录。以下是一个基础的文件浏览函数示例: ```java public...

    Android 判断双SD卡_CheckDoubleSDCard-IT计算机-毕业设计.zip

    Android提供了多种方法来获取SD卡的路径。例如,`Environment.getExternalStorageDirectory()`返回的是主要的外部存储空间,这可能是内部存储或SD卡。如果设备有第二个SD卡,可以使用`Environment....

    Android数据存储1:文件、SharedPreferences和获取sd卡信息

    Android提供了两种基本的文件存储方式:内部存储和外部存储。内部存储的数据通常对用户不可见,而外部存储则允许用户访问甚至修改文件。内部存储适用于应用私有的数据,如用户配置或应用程序状态。使用`getFilesDir...

    Android开发之获取SD卡及手机ROM容量的方法

    在Android开发中,获取设备的存储空间信息是常见的需求,比如SD卡(外部存储)和手机内部ROM(内部存储)的总容量以及可用容量。本文将详细解释如何使用Java和Android SDK来实现这一功能。 首先,我们要明确Android...

Global site tag (gtag.js) - Google Analytics