在android

时间:2018-06-16 12:13:06

标签: android kotlin android-camera-intent android-fileprovider

我正在使用照片编辑器库,它将图像uri作为输入。我正在为用户提供相机选项。在EXTRA_OUTPUT意图中,我给了uri文件,其中应该保存捕获的图像,然后我通过intent.setData()方法将相同的uri传递给照片编辑器SDK的活动。

所有使用Android API 23或更低版本的工作正常。正如我们在API 24或更高版本中所知,出于某些安全原因,我们无法直接在EXTRA_OUTPUT中使用文件uri。在这种情况下我们必须使用FileProvider,我也做了同样的事情。我使用FileProvider并使用FileProvider的getUriForFile()方法获取uri文件。我把这个uri放在相机意图的EXTRA_OUTPUT中,并使用intent.setData()将它放在Photo editor SDK的活动意图中,但这次它给了我以下错误:

java.lang.IllegalArgumentException: column '_data' does not exist
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
    at android.app.ActivityThread.access$800(ActivityThread.java:155)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5343)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
 Caused by: java.lang.IllegalArgumentException: column '_data' does not exist
    at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
    at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:78)
    at com.dsphotoeditor.sdk.activity.DsPhotoEditorActivity.a(Unknown Source)
    at com.dsphotoeditor.sdk.activity.DsPhotoEditorActivity.a(Unknown Source)
    at com.dsphotoeditor.sdk.activity.DsPhotoEditorActivity.onCreate(Unknown Source)
    at android.app.Activity.performCreate(Activity.java:6010)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413) 
    at android.app.ActivityThread.access$800(ActivityThread.java:155) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5343)

我在谷歌搜索过但我没有得到任何建议或解决方案。是照片编辑器SDK的问题还是我在代码中的任何地方都出错了?为了简单起见,我将我的代码放在这里。

我使用Fileprovider获取uri并将其放入EXTRA_OUTPUT相机意图中,如下所示:

val image = File(appFolderCheckandCreate(), "tmp.jpg")
fileUri = FileProvider.getUriForFile(mContext,mContext.getApplicationContext().getPackageName() + ".provider", image);
var cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(cameraIntent, CAMERA_INTENT_CODE)

我将Uri放入照片编辑器sdk的活动意图如下:

photoEditorIntent.setData(fileUri)

0 个答案:

没有答案