我们有两个存储文件存储空间:
现在:
我可以使用Environment.getExternalStorageDirectory
访问sdcard内存中的文件和根...并返回: / storage / sdcard0 这没关系。
但是:
当我将文件和媒体(音乐,图片......)存储在手机内存中时,如何获得路径手机内存?
答案 0 :(得分:1)
存储和检索应用程序数据的方法有很多种; SharedPreferences,内部存储,外部存储。 - SharedPreferences基本上限制其他应用访问数据。 - 内部存储基本上将数据存储在手机内存中 - 外部存储基本上将数据存储在可以安装或卸载的任何其他存储卡中。
如果我理解你的问题,那么你对外部存储感兴趣 - 公共文件基本上将文件存储在外部存储中,并允许任何其他应用程序/用户访问该文件。
例如: File sample = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
答案 1 :(得分:1)
对于应用程序的内部文件目录,请使用
getFilesDir();
对于外部存储,请使用
Environment.getExternalStorageDirectory();
答案 2 :(得分:1)
好的,我通常使用这个助手类来保存我的媒体文件:
/**
* This class create, name given the timestamp and save a multimedia file in the Environment.DIRECTORY_PICTURES folder
* This location works best if you want the created images to be shared
* between applications and persist after your app has been uninstalled.
*/
public class FileManager {
public static final int MEDIA_TYPE_IMAGE = 1;
public static final int MEDIA_TYPE_VIDEO = 2;
public static Uri getOutputMediaFileUri(int type){
return Uri.fromFile(getOutputMediaFile(type));
}
/** Create a File for saving an image or video */
public static File getOutputMediaFile(int type){
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), VideoRecordingActivity.TAG);
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
Log.d("MyCameraApp", "failed to create directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE){
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_"+ timeStamp + ".jpg");
} else if(type == MEDIA_TYPE_VIDEO) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"VID_"+ timeStamp + ".mp4");
} else {
return null;
}
return mediaFile;
}
}
然后使用它我会做:
File currentFile= FileManager.getOutputMediaFile(2);
注意:媒体文件将在sdcard / Pictures / AppName中创建,但为了能够通过文件浏览器查看它们,请确保更新mediaScanner
:
MediaScannerConnection.scanFile(getApplicationContext(), new String[]{file.getPath()}, null,
new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, final Uri fileUri) {
//Eventually some UI updates
}
});