81

when I try to attach a file to an email, I get a java.io.FileNotFoundException: No content provider logcat output. If anyone could tell me what I am doing wrong or what I should do instead, that would be great.Thank you.

This is how I add the files to the email..:

Intent sendIntent = new Intent(Intent.ACTION_SEND);
                sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
                sendIntent.setType("video/3gp");
                sendIntent.setType("video/mp4");
                startActivity(sendIntent);

...and here is the entire logcat error output:

07-20 09:15:58.364: ERROR/Mms/media(168): IOException caught while opening or reading stream
07-20 09:15:58.364: ERROR/Mms/media(168): java.io.FileNotFoundException: No content provider: /sdcard/Video0006.mp4
07-20 09:15:58.364: ERROR/Mms/media(168):     at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:507)
07-20 09:15:58.364: ERROR/Mms/media(168):     at android.content.ContentResolver.openInputStream(ContentResolver.java:345)
07-20 09:15:58.364: ERROR/Mms/media(168):     at com.android.mms.model.MediaModel.initMediaSize(MediaModel.java:268)
07-20 09:15:58.364: ERROR/Mms/media(168):     at com.android.mms.model.MediaModel.<init>(MediaModel.java:76)
07-20 09:15:58.364: ERROR/Mms/media(168):     at com.android.mms.model.RegionMediaModel.<init>(RegionMediaModel.java:40)
07-20 09:15:58.364: ERROR/Mms/media(168):     at com.android.mms.model.VideoModel.<init>(VideoModel.java:55)
07-20 09:15:58.364: ERROR/Mms/media(168):     at com.android.mms.model.VideoModel.<init>(VideoModel.java:48)
07-20 09:15:58.364: ERROR/Mms/media(168):     at com.android.mms.data.WorkingMessage.changeMedia(WorkingMessage.java:434)
07-20 09:15:58.364: ERROR/Mms/media(168):     at com.android.mms.data.WorkingMessage.setAttachment(WorkingMessage.java:343)
07-20 09:15:58.364: ERROR/Mms/media(168):     at com.android.mms.ui.ComposeMessageActivity.addVideo(ComposeMessageActivity.java:2472)
07-20 09:15:58.364: ERROR/Mms/media(168):     at com.android.mms.ui.ComposeMessageActivity.addAttachment(ComposeMessageActivity.java:2544)
07-20 09:15:58.364: ERROR/Mms/media(168):     at com.android.mms.ui.ComposeMessageActivity.handleSendIntent(ComposeMessageActivity.java:2521)
07-20 09:15:58.364: ERROR/Mms/media(168):     at com.android.mms.ui.ComposeMessageActivity.initialize(ComposeMessageActivity.java:1703)
07-20 09:15:58.364: ERROR/Mms/media(168):     at com.android.mms.ui.ComposeMessageActivity.onCreate(ComposeMessageActivity.java:1633)
07-20 09:15:58.364: ERROR/Mms/media(168):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-20 09:15:58.364: ERROR/Mms/media(168):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
07-20 09:15:58.364: ERROR/Mms/media(168):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
07-20 09:15:58.364: ERROR/Mms/media(168):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
07-20 09:15:58.364: ERROR/Mms/media(168):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
07-20 09:15:58.364: ERROR/Mms/media(168):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-20 09:15:58.364: ERROR/Mms/media(168):     at android.os.Looper.loop(Looper.java:123)
07-20 09:15:58.364: ERROR/Mms/media(168):     at android.app.ActivityThread.main(ActivityThread.java:4363)
07-20 09:15:58.364: ERROR/Mms/media(168):     at java.lang.reflect.Method.invokeNative(Native Method)
07-20 09:15:58.364: ERROR/Mms/media(168):     at java.lang.reflect.Method.invoke(Method.java:521)
07-20 09:15:58.364: ERROR/Mms/media(168):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-20 09:15:58.364: ERROR/Mms/media(168):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-20 09:15:58.364: ERROR/Mms/media(168):     at dalvik.system.NativeStart.main(Native Method)
kivy
  • 987
  • 2
  • 12
  • 17

4 Answers4

115

You can also try this:

Uri.fromFile(new File(your image path));
Jay Rathod
  • 11,131
  • 6
  • 34
  • 58
Gaurav S
  • 1,151
  • 1
  • 7
  • 2
  • Can you see what's wrong this code [ [post](https://stackoverflow.com/q/44447813/7004388) ] . I'm stuck here. Please guide me. – coderpc Jun 09 '17 at 16:35
  • 1
    As how we get and save files changed with API 24, this is the simplest way to get an URI from a file taken using FileManagers. – YumeYume Aug 09 '17 at 15:30
112

Maybe you should pass an uri of the form file:///sdcard/Video0006.mp4.

SirDarius
  • 41,440
  • 8
  • 86
  • 100
  • 2
    The thing is when I try using sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(uri))); It tells me to change uri into an URI instead of a String, when I do that it tells to change the Uri into a String... I don't know what I should do about that. – kivy Jul 20 '10 at 10:31
  • What if there will no sdcard? – kadik Mar 16 '16 at 09:56
  • @kadik then the file will not be stored on an SD card, but the URI will still be of the same **form**... `file://[partition]/path/to/file` – SirDarius Mar 16 '16 at 19:37
8

This worked for me

val uri:Uri =  File(path).toUri()
Saurabh Dhage
  • 1,478
  • 5
  • 17
  • 31
0

Method to save an bitmap to a file

  private fun bitmapToFile(bitmap:Bitmap): Uri {
        // Get the context wrapper
        val wrapper = ContextWrapper(applicationContext)

        // Initialize a new file instance to save bitmap object
        var file = wrapper.getDir("Images",Context.MODE_PRIVATE)
        file = File(file,"${UUID.randomUUID()}.jpg")

        try{
            // Compress the bitmap and save in jpg format
            val stream:OutputStream = FileOutputStream(file)
            bitmap.compress(Bitmap.CompressFormat.JPEG,100,stream)
            stream.flush()
            stream.close()
        }catch (e:IOException){
            e.printStackTrace()
        }

        // Return the saved bitmap uri
        return Uri.parse(file.absolutePath)
    }
Prashant Arvind
  • 2,139
  • 20
  • 27