当-java.io.FileNotFoundException: 没有内容提供程序时怎么办?

当我尝试将文件附加到电子邮件时,会得到一个 java.io.FileNotFoundException: No content Provider logcat output。 如果有人能告诉我我做错了什么或者我应该做什么,那就太好了。谢谢你。

这是我如何添加文件的电子邮件. :

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

... 这是整个 logcat 错误输出:

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)
95068 次浏览

也许您应该传递一个形式为 file:///sdcard/Video0006.mp4的 uri。

你也可以试试这个:

Uri.fromFile(new File(your image path));

方法将位图保存到文件

  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)
}

这招对我很管用

val uri:Uri =  File(path).toUri()