Android saving file to external storage

后端 未结 12 744
抹茶落季
抹茶落季 2020-11-22 03:12

I have a little issue with creating a directory and saving a file to it on my android application. I\'m using this piece of code to do this :

String filename         


        
12条回答
  •  难免孤独
    2020-11-22 04:01

    since android 4.4 file saving has been changed. there is

    ContextCompat.getExternalFilesDirs(context, name);
    

    it retuns an array.

    when name is null

    the first value is like /storage/emulated/0/Android/com.my.package/files

    the second value is like /storage/extSdCard/Android/com.my.package/files

    android 4.3 and less it retuns a single item array

    parts of little messy code but it demonstrates how it works:

        /** Create a File for saving an image or video 
         * @throws Exception */
        private File getOutputMediaFile(int type) throws Exception{
    
            // Check that the SDCard is mounted
            File mediaStorageDir;
            if(internalstorage.isChecked())
            {
                mediaStorageDir = new File(getFilesDir().getAbsolutePath() );
            }
            else
            {
                File[] dirs=ContextCompat.getExternalFilesDirs(this, null);
                mediaStorageDir = new File(dirs[dirs.length>1?1:0].getAbsolutePath() );
            }
    
    
            // Create the storage directory(MyCameraVideo) if it does not exist
            if (! mediaStorageDir.exists()){
    
                if (! mediaStorageDir.mkdirs()){
    
                    output.setText("Failed to create directory.");
    
                    Toast.makeText(this, "Failed to create directory.", Toast.LENGTH_LONG).show();
    
                    Log.d("myapp", "Failed to create directory");
                    return null;
                }
            }
    
    
            // Create a media file name
    
            // For unique file name appending current timeStamp with file name
            java.util.Date date= new java.util.Date();
            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",Locale.ENGLISH)  .format(date.getTime());
    
            File mediaFile;
    
            if(type == MEDIA_TYPE_VIDEO) {
    
                // For unique video file name appending current timeStamp with file name
                mediaFile = new File(mediaStorageDir.getPath() + File.separator + slpid + "_" + pwsid + "_" + timeStamp + ".mp4");
    
            }
            else if(type == MEDIA_TYPE_AUDIO) {
    
                // For unique video file name appending current timeStamp with file name
                mediaFile = new File(mediaStorageDir.getPath() + File.separator + slpid + "_" + pwsid + "_" + timeStamp + ".3gp");
    
            } else {
                return null;
            }
    
            return mediaFile;
        }
    
    
    
        /** Create a file Uri for saving an image or video 
         * @throws Exception */
        private  Uri getOutputMediaFileUri(int type) throws Exception{
    
              return Uri.fromFile(getOutputMediaFile(type));
        }
    
    //usage:
            try {
                file=getOutputMediaFileUri(MEDIA_TYPE_AUDIO).getPath();
            } catch (Exception e1) {
                e1.printStackTrace();
                return;
            }
    

提交回复
热议问题