Android:当我在手机中保存文件时,内存将存储该文件的位置?我该如何访问它的路径?

时间:2015-06-17 00:28:06

标签: android android-activity path android-sdcard

我们有两个存储文件存储空间:

  • 1-手机内存
  • 2-sd card memory

现在:

我可以使用Environment.getExternalStorageDirectory访问sdcard内存中的文件和根...并返回: / storage / sdcard0 这没关系。

但是:

当我将文件和媒体(音乐,图片......)存储在手机内存中时,如何获得路径手机内存?

3 个答案:

答案 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
        }
    });