【发布时间】:2017-07-19 09:39:21
【问题描述】:
在 Nougat 中,此功能不起作用。
String path = getRealPathFromURI(this, getIntent().getParcelableExtra(Intent.EXTRA_STREAM));
public String getRealPathFromURI(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = {MediaStore.Images.Media.DATA};
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
if (cursor == null) return contentUri.getPath();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} finally {
if (cursor != null) {
cursor.close();
}
}
}
崩溃日志:
java.lang.RuntimeException: Unable to start activity ComponentInfo{class path}: java.lang.IllegalArgumentException: column '_data' does not exist
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2724)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1473)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
Caused by java.lang.IllegalArgumentException: column '_data' does not exist
at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:333)
at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:87)
at com.package.SaveImageActivity.getRealPathFromURI()
at com.package.SaveImageActivity.onCreate()
at android.app.Activity.performCreate(Activity.java:6672)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1140)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2612)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2724)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1473)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
这个功能在Android N之前的设备上可以正常工作。我看了文章file:// scheme is now not allowed to be attached with Intent on targetSdkVersion 24 (Android Nougat)。但找不到任何解决方案。所以请帮忙。
【问题讨论】:
-
为什么要从 URI 中获取文件路径?通常,您应该尝试将 URI 作为流使用,因为并非所有 URI 都由具有路径的本地文件支持。如果您试图访问该文件以读取 exif 数据,那么您可以将其作为流打开并使用此支持库来读取 exif 数据。 android-developers.googleblog.com/2016/12/…
-
@startoftext 我知道这是一个迟到的问题,但是通过您的方法,有各种设备会显示图像的 ORIENTATION_UNDEFINED,它们可以是横向或纵向,具体取决于 API 版本。对于模拟器上的 API 26 (Android 8),它会旋转 90 度,而在 API 29 及更高版本(Android 9 及更高版本)上,它显示的是纵向图像,没有任何旋转。你有什么解决办法吗?
标签: android android-7.0-nougat android-7.1-nougat