Android saving file to external storage

后端 未结 12 741
抹茶落季
抹茶落季 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 03:40

    The code presented by RajaReddy no longer works for KitKat

    This one does (2 changes):

    private void saveImageToExternalStorage(Bitmap finalBitmap) {
        String root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
        File myDir = new File(root + "/saved_images");
        myDir.mkdirs();
        Random generator = new Random();
        int n = 10000;
        n = generator.nextInt(n);
        String fname = "Image-" + n + ".jpg";
        File file = new File(myDir, fname);
        if (file.exists())
            file.delete();
        try {
            FileOutputStream out = new FileOutputStream(file);
            finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
            out.flush();
            out.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    
    
        // 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);
                    }
        });
    
    }
    
    0 讨论(0)
  • 2020-11-22 03:41

    Use this function to save your bitmap in SD card

    private void SaveImage(Bitmap finalBitmap) {
    
        String root = Environment.getExternalStorageDirectory().toString();
        File myDir = new File(root + "/saved_images");    
         if (!myDir.exists()) {
                        myDir.mkdirs();
                    }
        Random generator = new Random();
        int n = 10000;
        n = generator.nextInt(n);
        String fname = "Image-"+ n +".jpg";
        File file = new File (myDir, fname);
        if (file.exists ())
          file.delete (); 
        try {
            FileOutputStream out = new FileOutputStream(file);
            finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
            out.flush();
            out.close();
    
        } catch (Exception e) {
             e.printStackTrace();
        }
    }
    

    and add this in manifest

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    

    EDIT: By using this line you will be able to see saved images in the gallery view.

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                             Uri.parse("file://" + Environment.getExternalStorageDirectory())));
    

    look at this link also http://rajareddypolam.wordpress.com/?p=3&preview=true

    0 讨论(0)
  • 2020-11-22 03:41

    This code is Working great & Worked on KitKat as well. Appreciate @RajaReddy PolamReddy
    Added few more steps here and also Visible on Gallery as well.

    public void SaveOnClick(View v){
    File mainfile;
    String fpath;
    
    
        try {
    //i.e  v2:My view to save on own folder     
            v2.setDrawingCacheEnabled(true);
    //Your final bitmap according to my code.
            bitmap_tmp = v2.getDrawingCache();
    
    File(getExternalFilesDir(Environment.DIRECTORY_PICTURES)+File.separator+"/MyFolder");
    
              Random random=new Random();
              int ii=100000;
              ii=random.nextInt(ii);
              String fname="MyPic_"+ ii + ".jpg";
                File direct = new File(Environment.getExternalStorageDirectory() + "/MyFolder");
    
                if (!direct.exists()) {
                    File wallpaperDirectory = new File("/sdcard/MyFolder/");
                    wallpaperDirectory.mkdirs();
                }
    
                mainfile = new File(new File("/sdcard/MyFolder/"), fname);
                if (mainfile.exists()) {
                    mainfile.delete();
                }
    
                  FileOutputStream fileOutputStream;
            fileOutputStream = new FileOutputStream(mainfile);
    
            bitmap_tmp.compress(CompressFormat.JPEG, 100, fileOutputStream);
            Toast.makeText(MyActivity.this.getApplicationContext(), "Saved in Gallery..", Toast.LENGTH_LONG).show();
            fileOutputStream.flush();
            fileOutputStream.close();
            fpath=mainfile.toString();
            galleryAddPic(fpath);
        } catch(FileNotFoundException e){
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
    }
    

    This is Media scanner to Visible in Gallery.

    private void galleryAddPic(String fpath) {
        Intent mediaScanIntent = new Intent("android.intent.action.MEDIA_SCANNER_SCAN_FILE");
        File f = new File(fpath);
        Uri contentUri = Uri.fromFile(f);
        mediaScanIntent.setData(contentUri);
        this.sendBroadcast(mediaScanIntent);
    }
    
    0 讨论(0)
  • Probably exception is thrown because there is no MediaCard subdir. You should check if all dirs in the path exist.

    About visibility of your files: if you put file named .nomedia in your dir you are telling Android that you don't want it to scan it for media files and they will not appear in the gallery.

    0 讨论(0)
  • 2020-11-22 03:51

    Make sure your app has the proper permissions to be allowed to write to external storage: http://developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE

    It should look something like this in your manifest file:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    0 讨论(0)
  • 2020-11-22 03:55

    Click Here for full description and source code

    public void saveImage(Context mContext, Bitmap bitmapImage) {
    
      File sampleDir = new File(Environment.getExternalStorageDirectory() + "/" + "ApplicationName");
    
      TextView tvImageLocation = (TextView) findViewById(R.id.tvImageLocation);
      tvImageLocation.setText("Image Store At : " + sampleDir);
    
      if (!sampleDir.exists()) {
          createpathForImage(mContext, bitmapImage, sampleDir);
      } else {
          createpathForImage(mContext, bitmapImage, sampleDir);
      }
    }
    
    0 讨论(0)
提交回复
热议问题