public class Environment
extends Object
java.lang.Object | |
↳ | android.os.Environment |
提供对环境变量的访问。
Constants |
|
---|---|
String |
MEDIA_BAD_REMOVAL 存储状态,如果介质在卸载之前被删除。 |
String |
MEDIA_CHECKING 如果介质存在并正在进行磁盘检查,则为存储状态。 |
String |
MEDIA_EJECTING 存储状态,如果媒体正在被弹出的过程中。 |
String |
MEDIA_MOUNTED 存储状态,如果介质存在并且以读/写访问的方式安装在其安装点。 |
String |
MEDIA_MOUNTED_READ_ONLY 存储状态,如果介质存在并且以只读访问权限挂载到它的挂载点。 |
String |
MEDIA_NOFS 存储状态,如果介质存在但空白或正在使用不受支持的文件系统。 |
String |
MEDIA_REMOVED 存储状态,如果介质不存在。 |
String |
MEDIA_SHARED 存储状态,如果介质未安装,并通过USB海量存储共享。 |
String |
MEDIA_UNKNOWN 未知存储状态,例如路径未被已知存储介质支持时。 |
String |
MEDIA_UNMOUNTABLE 存储状态,如果介质存在但无法安装。 |
String |
MEDIA_UNMOUNTED 存储状态,如果介质存在但未安装。 |
Fields |
|
---|---|
public static String |
DIRECTORY_ALARMS 用于放置任何音频文件的标准目录,该文件应位于用户可以选择的闹铃列表中(而不是普通音乐)。 |
public static String |
DIRECTORY_DCIM 将设备安装为相机时的传统照片和视频位置。 |
public static String |
DIRECTORY_DOCUMENTS 在其中放置用户创建的文档的标准目录。 |
public static String |
DIRECTORY_DOWNLOADS 用于放置用户下载文件的标准目录。 |
public static String |
DIRECTORY_MOVIES 用于放置用户可用电影的标准目录。 |
public static String |
DIRECTORY_MUSIC 用于放置任何音频文件的标准目录,该文件应该位于用户的常规音乐列表中。 |
public static String |
DIRECTORY_NOTIFICATIONS 用于放置任何音频文件的标准目录,该文件应该位于用户可以选择的通知列表中(而不是普通音乐)。 |
public static String |
DIRECTORY_PICTURES 在其中放置可供用户使用的图片的标准目录。 |
public static String |
DIRECTORY_PODCASTS 用于放置任何音频文件的标准目录,该文件应该位于用户可以选择的播客列表中(而不是普通音乐)。 |
public static String |
DIRECTORY_RINGTONES 用于放置任何音频文件的标准目录,该文件应位于用户可以选择的铃声列表中(而不是普通音乐)。 |
Public constructors |
|
---|---|
Environment() |
Public methods |
|
---|---|
static File |
getDataDirectory() 返回用户数据目录。 |
static File |
getDownloadCacheDirectory() 返回下载/缓存内容目录。 |
static File |
getExternalStorageDirectory() 返回主共享/外部存储目录。 |
static File |
getExternalStoragePublicDirectory(String type) 获取用于放置特定类型文件的顶级共享/外部存储目录。 |
static String |
getExternalStorageState() 返回主共享/外部存储媒体的当前状态。 |
static String |
getExternalStorageState(File path) 返回给定路径上的共享/外部存储介质的当前状态。 |
static File |
getRootDirectory() 返回持有核心Android OS的“系统”分区的根目录。 |
static String |
getStorageState(File path) 此方法在API级别21中已弃用。请使用 |
static boolean |
isExternalStorageEmulated() 返回是否模拟主要共享/外部存储介质。 |
static boolean |
isExternalStorageEmulated(File path) 返回是否仿真给定路径上的共享/外部存储介质。 |
static boolean |
isExternalStorageRemovable() 返回主共享/外部存储介质是否可物理移除。 |
static boolean |
isExternalStorageRemovable(File path) 返回给定路径上的共享/外部存储介质是否可物理移除。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
String MEDIA_BAD_REMOVAL
存储状态,如果介质在卸载之前被删除。
常量值:“bad_removal”
String MEDIA_MOUNTED_READ_ONLY
存储状态,如果介质存在并且以只读访问权限挂载到它的挂载点。
常量值:“mounted_ro”
String MEDIA_UNMOUNTABLE
存储状态,如果介质存在但无法安装。 通常,如果介质上的文件系统损坏,就会发生这种情况。
常数值:“unmountable”
String DIRECTORY_ALARMS
用于放置任何音频文件的标准目录,该文件应位于用户可以选择的闹铃列表中(而不是普通音乐)。 此可结合DIRECTORY_MUSIC
, DIRECTORY_PODCASTS
, DIRECTORY_NOTIFICATIONS
和DIRECTORY_RINGTONES
作为一系列目录到类别的特定音频文件作为一个以上的类型。
String DIRECTORY_DCIM
将设备安装为相机时的传统照片和视频位置。 请注意,这主要是顶级公共目录的约定,因为这个约定在别处没有意义。
String DIRECTORY_DOWNLOADS
用于放置用户下载文件的标准目录。 请注意,这主要是顶级公共目录的约定,您可以自由下载私人目录中的任何位置的文件。 还要注意,尽管这里的常量名为DIRECTORY_DOWNLOADS(复数),但由于向后兼容性的原因,实际的文件名是非复数的。
String DIRECTORY_MOVIES
用于放置用户可用电影的标准目录。 请注意,这主要是顶级公共目录的惯例,因为媒体扫描器将在任何目录中查找和收集电影。
String DIRECTORY_MUSIC
用于放置任何音频文件的标准目录,该文件应该位于用户的常规音乐列表中。 此可结合DIRECTORY_PODCASTS
, DIRECTORY_NOTIFICATIONS
, DIRECTORY_ALARMS
和DIRECTORY_RINGTONES
作为一系列目录到类别的特定音频文件作为一个以上的类型。
String DIRECTORY_NOTIFICATIONS
用于放置任何音频文件的标准目录,该文件应该位于用户可以选择的通知列表中(而不是普通音乐)。 此可结合DIRECTORY_MUSIC
, DIRECTORY_PODCASTS
, DIRECTORY_ALARMS
和DIRECTORY_RINGTONES
作为一系列目录到类别的特定音频文件作为一个以上的类型。
String DIRECTORY_PICTURES
在其中放置可供用户使用的图片的标准目录。 请注意,这主要是顶级公共目录的约定,因为媒体扫描器将在任何目录中查找和收集图片。
String DIRECTORY_PODCASTS
用于放置任何音频文件的标准目录,该文件应该位于用户可以选择的播客列表中(而不是普通音乐)。 此可结合DIRECTORY_MUSIC
, DIRECTORY_NOTIFICATIONS
, DIRECTORY_ALARMS
和DIRECTORY_RINGTONES
作为一系列目录到类别的特定音频文件作为一个以上的类型。
String DIRECTORY_RINGTONES
用于放置任何音频文件的标准目录,该文件应位于用户可以选择的铃声列表中(而不是普通音乐)。 此可结合DIRECTORY_MUSIC
, DIRECTORY_PODCASTS
, DIRECTORY_NOTIFICATIONS
和DIRECTORY_ALARMS
作为一系列目录到类别的特定音频文件作为一个以上的类型。
File getDownloadCacheDirectory ()
返回下载/缓存内容目录。
Returns | |
---|---|
File |
File getExternalStorageDirectory ()
返回主共享/外部存储目录。 如果用户在他们的计算机上安装了该目录,该设备目前可能无法访问,该设备已从设备中删除,或发生其他问题。 您可以使用getExternalStorageState()
确定其当前状态。
注意:不要被这里的“外部”一词所迷惑。 这个目录可以更好地被认为是媒体/共享存储。 它是一个文件系统,可以容纳大量的数据并在所有应用程序之间共享(不强制执行权限)。 传统上这是一张SD卡,但它也可以实现为与受保护的内部存储器不同的设备中的内置存储器,并且可以作为文件系统安装在计算机上。
在具有多个用户的设备上(如UserManager
),每个用户都有自己独立的共享存储。 应用程序只能访问正在运行的用户的共享存储。
在具有多个共享/外部存储目录的设备中,此目录代表用户将与之交互的主存储。 进入二级存储,可通过getExternalFilesDirs(String)
, getExternalCacheDirs()
,并getExternalMediaDirs()
。
应用程序不应直接使用此顶级目录,以避免污染用户的根名称空间。 应用程序专用的任何文件都应放置在由Context.getExternalFilesDir
返回的Context.getExternalFilesDir
,如果应用程序已卸载,系统将负责删除该目录。 其他共享文件应放置在由getExternalStoragePublicDirectory(String)
返回的其中一个目录中。
写入此路径需要 WRITE_EXTERNAL_STORAGE
权限,并且从 KITKAT
开始,读取访问权限需要 READ_EXTERNAL_STORAGE
权限,如果您拥有写入权限,则会自动授予该权限。
开始在 KITKAT
,如果你的应用程序只需要存储内部数据,可以考虑使用 getExternalFilesDir(String)
, getExternalCacheDir()
,或 getExternalMediaDirs()
,它不需要的权限读取或写入。
此路径可能会在平台版本之间发生变化,因此应用程序应该只保留相对路径。
以下是监视外部存储状态的典型代码示例:
BroadcastReceiver mExternalStorageReceiver; boolean mExternalStorageAvailable = false; boolean mExternalStorageWriteable = false; void updateExternalStorageState() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { mExternalStorageAvailable = mExternalStorageWriteable = true; } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { mExternalStorageAvailable = true; mExternalStorageWriteable = false; } else { mExternalStorageAvailable = mExternalStorageWriteable = false; } handleExternalStorageState(mExternalStorageAvailable, mExternalStorageWriteable); } void startWatchingExternalStorage() { mExternalStorageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.i("test", "Storage: " + intent.getData()); updateExternalStorageState(); } }; IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_MEDIA_MOUNTED); filter.addAction(Intent.ACTION_MEDIA_REMOVED); registerReceiver(mExternalStorageReceiver, filter); updateExternalStorageState(); } void stopWatchingExternalStorage() { unregisterReceiver(mExternalStorageReceiver); }
Returns | |
---|---|
File |
File getExternalStoragePublicDirectory (String type)
获取用于放置特定类型文件的顶级共享/外部存储目录。 这是用户通常放置和管理他们自己的文件的地方,因此,您应该注意您放置在这里的内容,以确保您不会擦除文件或妨碍他们自己的组织。
在具有多个用户的设备上(如UserManager
),每个用户都有自己独立的共享存储。 应用程序只能访问正在运行的用户的共享存储。
以下是在公共共享存储上操作图片的典型代码示例:
void createExternalStoragePublicPicture() { // Create a path where we will place our picture in the user's // public pictures directory. Note that you should be careful about // what you place here, since the user often manages these files. For // pictures and other media owned by the application, consider // Context.getExternalMediaDir(). File path = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES); File file = new File(path, "DemoPicture.jpg"); try { // Make sure the Pictures directory exists. path.mkdirs(); // Very simple code to copy a picture from the application's // resource into the external file. Note that this code does // no error checking, and assumes the picture is small (does not // try to copy it in chunks). Note that if external storage is // not currently mounted this will silently fail. InputStream is = getResources().openRawResource(R.drawable.balloons); OutputStream os = new FileOutputStream(file); byte[] data = new byte[is.available()]; is.read(data); os.write(data); is.close(); os.close(); // Tell the media scanner about the new file so that it is // immediately available to the user. MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } }); } catch (IOException e) { // Unable to create file, likely because external storage is // not currently mounted. Log.w("ExternalStorage", "Error writing " + file, e); } } void deleteExternalStoragePublicPicture() { // Create a path where we will place our picture in the user's // public pictures directory and delete the file. If external // storage is not currently mounted this will fail. File path = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES); File file = new File(path, "DemoPicture.jpg"); file.delete(); } boolean hasExternalStoragePublicPicture() { // Create a path where we will place our picture in the user's // public pictures directory and check if the file exists. If // external storage is not currently mounted this will think the // picture doesn't exist. File path = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES); File file = new File(path, "DemoPicture.jpg"); return file.exists(); }
Parameters | |
---|---|
type |
String : The type of storage directory to return. Should be one of DIRECTORY_MUSIC , DIRECTORY_PODCASTS , DIRECTORY_RINGTONES , DIRECTORY_ALARMS , DIRECTORY_NOTIFICATIONS , DIRECTORY_PICTURES , DIRECTORY_MOVIES , DIRECTORY_DOWNLOADS , DIRECTORY_DCIM , or DIRECTORY_DOCUMENTS . May not be null. |
Returns | |
---|---|
File |
Returns the File path for the directory. Note that this directory may not yet exist, so you must make sure it exists before using it such as with File.mkdirs() . |
String getExternalStorageState ()
返回主共享/外部存储媒体的当前状态。
Returns | |
---|---|
String |
one of MEDIA_UNKNOWN , MEDIA_REMOVED , MEDIA_UNMOUNTED , MEDIA_CHECKING , MEDIA_NOFS , MEDIA_MOUNTED , MEDIA_MOUNTED_READ_ONLY , MEDIA_SHARED , MEDIA_BAD_REMOVAL , or MEDIA_UNMOUNTABLE . |
String getExternalStorageState (File path)
返回给定路径上的共享/外部存储介质的当前状态。
Parameters | |
---|---|
path |
File
|
Returns | |
---|---|
String |
one of MEDIA_UNKNOWN , MEDIA_REMOVED , MEDIA_UNMOUNTED , MEDIA_CHECKING , MEDIA_NOFS , MEDIA_MOUNTED , MEDIA_MOUNTED_READ_ONLY , MEDIA_SHARED , MEDIA_BAD_REMOVAL , or MEDIA_UNMOUNTABLE . |
File getRootDirectory ()
返回持有核心Android OS的“系统”分区的根目录。 始终呈现并安装为只读。
Returns | |
---|---|
File |
String getStorageState (File path)
此方法在API级别21中已弃用。
使用getExternalStorageState(File)
Parameters | |
---|---|
path |
File
|
Returns | |
---|---|
String |
boolean isExternalStorageEmulated ()
返回是否模拟主要共享/外部存储介质。
模拟存储设备的内容由专用用户数据分区提供支持,这意味着在此存储数据的应用程序没有什么益处,而不是由 getFilesDir()
等返回的专用目录。
当模拟存储由内部存储或采用的存储设备支持时,此操作返回true。
Returns | |
---|---|
boolean |
boolean isExternalStorageEmulated (File path)
返回是否仿真给定路径上的共享/外部存储介质。
模拟存储设备的内容由专用用户数据分区提供支持,这意味着在此存储数据的应用程序没有什么益处,而不是由 getFilesDir()
等返回的专用目录。
当模拟存储由内部存储或采用的存储设备支持时,此操作返回true。
Parameters | |
---|---|
path |
File
|
Returns | |
---|---|
boolean |
Throws | |
---|---|
IllegalArgumentException |
if the path is not a valid storage device. |
boolean isExternalStorageRemovable ()
返回主共享/外部存储介质是否可物理移除。
Returns | |
---|---|
boolean |
true if the storage device can be removed (such as an SD card), or false if the storage device is built in and cannot be physically removed. |
boolean isExternalStorageRemovable (File path)
返回给定路径上的共享/外部存储介质是否可物理移除。
Parameters | |
---|---|
path |
File
|
Returns | |
---|---|
boolean |
true if the storage device can be removed (such as an SD card), or false if the storage device is built in and cannot be physically removed. |
Throws | |
---|---|
IllegalArgumentException |
if the path is not a valid storage device. |