How to save imageView image in gallery (Android Development)

I am trying to create an onClick event to save an image in the phone gallery by pressing a button, below is my code. he doesnโ€™t save in the Gallery, can anyone help me understand why?

sharebtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View b) { // TODO Auto-generated method stub //attempt to save the image b = findViewById(R.id.imageView); b.setDrawingCacheEnabled(true); Bitmap bitmap = b.getDrawingCache(); //File file = new File("/DCIM/Camera/image.jpg"); File root = Environment.getExternalStorageDirectory(); File cachePath = new File(root.getAbsolutePath() + "/DCIM/Camera/image.jpg"); try { cachePath.createNewFile(); FileOutputStream ostream = new FileOutputStream(cachePath); bitmap.compress(CompressFormat.JPEG, 100, ostream); ostream.close(); } catch (Exception e) { e.printStackTrace(); } } }); 
+5
source share
5 answers

I do this to save the image in the gallery.

 private void saveImageToGallery(){ imageview.setDrawingCacheEnabled(true); Bitmap b = imageview.getDrawingCache(); Images.Media.insertImage(getActivity().getContentResolver(), b,title, description); } 

insertImage() will return String != null if the image was actually saved. Also: permission is required in a manifest like "android.permission.WRITE_EXTERNAL_STORAGE" Note that this places the image at the bottom of the list of images already in the gallery.

Hope this helps.

+6
source
 public static void addImageToGallery(final String filePath, final Context context) { ContentValues values = new ContentValues(); values.put(Images.Media.DATE_TAKEN, System.currentTimeMillis()); values.put(Images.Media.MIME_TYPE, "image/jpeg"); values.put(MediaStore.MediaColumns.DATA, filePath); context.getContentResolver().insert(Images.Media.EXTERNAL_CONTENT_URI, values); } 
+2
source

Suppose ImageView already saves the image you want to save, first get the bitmap

 imageView.buildDrawingCache(); Bitmap bm=imageView.getDrawingCache(); 

Then save it with the code below: -

 MediaStore.Images.Media.insertImage(getContentResolver(), yourBitmap, yourTitle , yourDescription); 

And don't forget to set this permission in your manifest: -

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

You must save the image in the media provider. Here is a simple example:

 Uri saveMediaEntry(String imagePath,String title,String description,long dateTaken,int orientation,Location loc) { ContentValues v = new ContentValues(); v.put(Images.Media.TITLE, title); v.put(Images.Media.DISPLAY_NAME, displayName); v.put(Images.Media.DESCRIPTION, description); v.put(Images.Media.DATE_ADDED, dateTaken); v.put(Images.Media.DATE_TAKEN, dateTaken); v.put(Images.Media.DATE_MODIFIED, dateTaken) ; v.put(Images.Media.MIME_TYPE, "image/jpeg"); v.put(Images.Media.ORIENTATION, orientation); File f = new File(imagePath) ; File parent = f.getParentFile() ; String path = parent.toString().toLowerCase() ; String name = parent.getName().toLowerCase() ; v.put(Images.ImageColumns.BUCKET_ID, path.hashCode()); v.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, name); v.put(Images.Media.SIZE,f.length()) ; f = null ; if( targ_loc != null ) { v.put(Images.Media.LATITUDE, loc.getLatitude()); v.put(Images.Media.LONGITUDE, loc.getLongitude()); } v.put("_data",imagePath) ; ContentResolver c = getContentResolver() ; return c.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, v); } 
+1
source
 private void galleryAddPic() { Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); File f = new File(mCurrentPhotoPath); Uri contentUri = Uri.fromFile(f); mediaScanIntent.setData(contentUri); this.sendBroadcast(mediaScanIntent); } 

Check this out: http://developer.android.com/training/camera/photobasics.html#TaskGallery

0
source

Source: https://habr.com/ru/post/1468885/


All Articles