Mi手机无法上传图片

3
这是我在Mi手机上尝试上传图片时遇到的错误。但对于其他手机,它工作正常。
java.lang.RuntimeException: Failure delivering result 
ResultInfo{who=null, request=1, result=-1, data=Intent { flg=0x1 clip={image/* text/uri-list U:content://com.miui.gallery.open/raw/%2Fstorage%2Femulated%2F0%2FDCIM%2FCamera%2FIMG_20171107_230239.jpg} (has extras) }} to activity {com.fullstacknet.chatapp/com.fullstacknet.chatapp.ChatActivity}: 
java.lang.IllegalArgumentException: Invalid URI: content://com.miui.gallery.open/raw/%2Fstorage%2Femulated%2F0%2FDCIM%2FCamera%2FIMG_20171107_230239.jpg
    at android.app.ActivityThread.deliverResults(ActivityThread.java:4108)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:4151)
    at android.app.ActivityThread.-wrap20(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1551)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6195)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:874)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764)
Caused by: java.lang.IllegalArgumentException: Invalid URI: content://com.miui.gallery.open/raw/%2Fstorage%2Femulated%2F0%2FDCIM%2FCamera%2FIMG_20171107_230239.jpg
    at android.provider.DocumentsContract.getDocumentId(DocumentsContract.java:917)
    at com.fullstacknet.chatapp.ChatActivity.getRealPathFromURI(ChatActivity.java:896)
    at com.fullstacknet.chatapp.ChatActivity.onActivityResult(ChatActivity.java:962)
    at android.app.Activity.dispatchActivityResult(Activity.java:6998)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:4104)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:4151) 
    at android.app.ActivityThread.-wrap20(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1551) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6195) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:874) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764) 
    11-08 13:38:59.261 28831-28831/com.fullstacknet.chatapp E/MQSEventManagerDelegate: failed to get MQSService.

我正在使用以下意图选择图片:

 Intent intent = new Intent();
 intent.setType("image/*");
 intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
 intent.setAction(Intent.ACTION_GET_CONTENT);
 startActivityForResult(Intent.createChooser(intent,"Select Picture"), 1);

在选择完图片后,它没有进入onActivityResult。你有什么解决问题的想法吗?


你找到任何解决方案了吗? - Marzi Heidari
@MarziHeidari,您应该从返回的URI中打开流,而不是使用绝对路径。 - Marcos Vasconcelos
3个回答

3

如果您在日志中看到URI

URI: content://com.miui.gallery.open/raw/%2Fstorage%2Femulated%2F0%2FDCIM%2FCamera%2FIMG_20171107_230239.jpg

这里的%2F没有被正确解码。

应该是这样的:

content://com.miui.gallery.open/raw//storage/emulated/0/DCIM/Camera/IMG_20171107_230239.jpg

但我仍然认为它不会起作用,因为它是定制的。

最好返回实际路径/storage/emulated/0/DCIM/Camera/IMG_20171107_230239.jpg,如果需要,则获取URI。


在你调用return的地方 - suresh madaparthi

0

这就是解决方案,关键词是ws

   private boolean corp(Activity activity, Uri uri, boolean fromCamera) {
        Intent cropIntent = new Intent("com.android.camera.action.CROP");
        if (fromCamera){
            cropIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
        }
       ...

https://blog.csdn.net/weixin_40087231/article/details/89467708


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

-2
完美的解决方案是,在您的清单文件中添加以下实体
android:hardwareAccelerated="false"

android:largeHeap="true"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接