2010-07-20 62 views
24

当我尝试将文件附加到电子邮件时,出现java.io.FileNotFoundException:没有内容提供者logcat输出。 如果有人能告诉我我做错了什么,或者我应该做什么,那就太好了。谢谢。什么时候做 - java.io.FileNotFoundException:没有内容提供者?

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

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) 

回答

65

也许你应该传递的URI表格file:///sdcard/Video0006.mp4

+1

的事情是,当我尝试使用 sendIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(新文件(URI))); 它告诉我改变一个URI而不是一个字符串的URI,当我这样做时,它告诉将Uri更改为一个字符串......我不知道我该怎么做。 – kivy 2010-07-20 10:31:55

+0

如果没有SD卡会怎么样? – kadik 2016-03-16 09:56:41

+0

@kadik然后该文件将不会被存储在SD卡上,但该URI将仍然是相同的**形式** ...'file:// [分区] /路径/到/文件 – SirDarius 2016-03-16 19:37:00

27

你也可以试试这个:

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

你能看看这段代码有什么问题[[post](https://stackoverflow.com/q/44447813/7004388)]。我被困在这里。请指导我。 – Chip 2017-06-09 16:35:39

+1

由于我们如何获取和保存使用API​​ 24更改的文件,这是从使用FileManagers获取文件获取URI的最简单方法。 – YumeYume 2017-08-09 15:30:20