Search code examples
androidandroid-contentprovider

How can i send image without storing in sdcard?


I am developing an application that displays images. The application provides an option to email the image as an attachment. I have to save the image to the SD card in order to email the image as an attachment.

Is it possible to email the image as an attachment without writing it to the SD card first?


Solution

  • @sivaraj For example, if you store you image anywhere in the phone (even in a private folder) Just modify it if you don't want to store it at all in the openFile method. Register your provider in your manifest with the right authorities attribute and that's it !

    public class ImageProvider extends ContentProvider {
            private static final String URI_PREFIX = "content://com.android.myproject.anythingyouwant";
    
            public static String constructUri(String url) {
                Uri uri = Uri.parse(url);
                return uri.isAbsolute() ? url : URI_PREFIX + url;
            }
    
            @Override
            public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
                File file = new File(uri.getPath());
                ParcelFileDescriptor parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
                return parcel;
            }
    
            @Override
            public boolean onCreate() {
                return true;
            }
    
            @Override
            public int delete(Uri uri, String s, String[] as) {
                throw new UnsupportedOperationException("Not supported by this provider");
            }
    
            @Override
            public String getType(Uri uri) {
                throw new UnsupportedOperationException("Not supported by this provider");
            }
    
            @Override
            public Uri insert(Uri uri, ContentValues contentvalues) {
                throw new UnsupportedOperationException("Not supported by this provider");
            }
    
            @Override
            public Cursor query(Uri uri, String[] as, String s, String[] as1, String s1) {
                throw new UnsupportedOperationException("Not supported by this provider");
            }
    
            @Override
            public int update(Uri uri, ContentValues contentvalues, String s, String[] as) {
               throw new UnsupportedOperationException("Not supported by this provider");
            }
        }