Android 10:在Android Q中选择视频时崩溃
我想从gallery上传一段视频。我使用Android 10:在Android Q中选择视频时崩溃,android,onactivityresult,android-contentresolver,android-10.0,Android,Onactivityresult,Android Contentresolver,Android 10.0,我想从gallery上传一段视频。我使用startActivityForResualt并从 onActivityResualt 然后将uri传递给get real path的方法这是我的方法: private static String getRealPath(Context context, Uri uri) { final String column = "_data"; String[] proj = {MediaStore.Video.Media.DATA};
startActivityForResualt
并从
onActivityResualt
然后将uri传递给get real path的方法这是我的方法:
private static String getRealPath(Context context, Uri uri) {
final String column = "_data";
String[] proj = {MediaStore.Video.Media.DATA};
try (Cursor cursor = context.getContentResolver().query(uri, proj, null, null, null)) {
if (cursor != null && cursor.moveToFirst()) {
final int index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(index);
}
}
return null;
}
因此它适用于除android 10之外的所有API。 在android 10中,它会打开视频选择器活动,我可以选择一个视频,但当我选择该视频时,它想返回到主活动崩溃并显示此错误!!: java.lang.IllegalArgumentException:列纬度无效 这是我的日志:
2020-05-26 20:39:53.736 6048-6705/com.google.android.apps.photos E/DatabaseUtils: Writing exception to parcel
java.lang.IllegalArgumentException: Invalid column latitude
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:170)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:423)
at android.content.ContentResolver.query(ContentResolver.java:944)
at android.content.ContentResolver.query(ContentResolver.java:880)
at android.content.ContentResolver.query(ContentResolver.java:836)
at _1194.a(PG:97)
at com.google.android.apps.photos.contentprovider.impl.MediaContentProvider.a(PG:32)
at alca.query(PG:34)
at android.content.ContentProvider.query(ContentProvider.java:1214)
at alca.query(PG:10)
at android.content.ContentProvider.query(ContentProvider.java:1307)
at android.content.ContentProvider$Transport.query(ContentProvider.java:267)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:104)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)
2020-05-26 20:39:53.755 7315-7315/diar.neo.mainactivvity E/AndroidRuntime: FATAL EXCEPTION: main
Process: diar.neo.mainactivvity, PID: 7315
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=Intent { dat=content://com.google.android.apps.photos.contentprovider/-1/2/content://media/external/video/media/30/ORIGINAL/NONE/893152725 flg=0x1 clip={text/uri-list U:content://com.google.android.apps.photos.contentprovider/-1/2/content%3A%2F%2Fmedia%2Fexternal%2Fvideo%2Fmedia%2F30/ORIGINAL/NONE/893152725} }} to activity {diar.neo.mainactivvity/diar.neo.mainactivvity.MainActivity}: java.lang.IllegalArgumentException: Invalid column latitude
at android.app.ActivityThread.deliverResults(ActivityThread.java:4845)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4886)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
我该怎么办?我通常使用此文件从库中获取任何内容的完整路径 试试看,让我知道
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ContentResolver resolver = mContext.getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/png");
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, "DCIM/" + IMAGES_FOLDER_NAME);
Uri imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
}
我通常使用此文件从库中获取任何内容的完整路径 试试看,让我知道
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ContentResolver resolver = mContext.getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/png");
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, "DCIM/" + IMAGES_FOLDER_NAME);
Uri imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
}
“所以它可以在除安卓10之外的所有API上运行”——这并不可靠。不需要
数据
来指向应用程序可以使用的任何内容。只需直接使用Uri
(例如ContentResolver
上的openInputStream()
)即可。您将获得文件的路径。将MediaStore.Video.Media.DATA传递到getColumnIndexOrThrow函数,而不是columnfinal int index=cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA)代码>它在所有API bellow android上都能完美运行Q@mohosyny你在模拟器上测试吗?如果不是,你在用什么设备进行测试?“除了安卓10,它可以在所有API上工作”——不可靠。不需要数据
来指向应用程序可以使用的任何内容。只需直接使用Uri
(例如ContentResolver
上的openInputStream()
)即可。您将获得文件的路径。将MediaStore.Video.Media.DATA传递到getColumnIndexOrThrow函数,而不是columnfinal int index=cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA)代码>它在所有API bellow android上都能完美运行Q@mohosyny你在模拟器上测试吗?如果没有,你正在用什么设备进行测试?你在Android 10上测试过吗?不久前用一个图像在模拟器上进行了测试,它成功了。谢谢,但我也在模拟器上进行了测试,在Android 10I上出现了同样的错误,我更新了解决方案。你能用上面的答案试一下图片,让我们看看会发生什么。这应该行得通。我不明白在我的代码中我应该在哪里使用上面的代码。你在Android 10上测试过吗?不久前在模拟器上用一个图像测试过它,它就行了。谢谢,但我也在模拟器上测试过它,同样的错误在Android 10上我更新了解决方案。你能用上面的答案试一下图片,让我们看看会发生什么。这应该行得通。我不明白在我的代码中应该在哪里使用上面的代码