Android onActivityResult结果\代码始终为0(取消)

Android onActivityResult结果\代码始终为0(取消),android,android-camera,android-camera-intent,Android,Android Camera,Android Camera Intent,另一个奇怪的问题。通过intent使用相机时,总是会取消结果_(这是一个问题)。更相关的背景: 我将setOnClickListener分配给活动“onCreate: this.imSnapshot.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent cameraIntent = new Intent(MediaStore.AC

另一个奇怪的问题。通过intent使用相机时,总是会取消结果_(这是一个问题)。更相关的背景:

我将setOnClickListener分配给活动“onCreate:

this.imSnapshot.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, getImageUri());
        startActivityForResult(cameraIntent, CAMERA_REQUEST);
    }
});
getImageUri方法的代码:

private Uri getImageUri() {
    ContextWrapper cw = new ContextWrapper(this);
    File dir = cw.getDir("dcim", Context.MODE_PRIVATE);
    File file = new File(dir, UUID.randomUUID().toString()+".png");
    Uri imgUri = Uri.fromFile(file);
    Log.d("DetailsModify.getImageUri", imgUri.toString());
    return imgUri;
}
以下是onActivityResult(日志行始终返回0):

更新:该错误是由IDE过滤的,因此我最初没有注意到它:

CameraActivity:Saved image not found
        java.io.FileNotFoundException
        at android.os.Parcel.openFileDescriptor(Native Method)
        at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:119)
        at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:481)
        at android.content.ContentResolver.openOutputStream(ContentResolver.java:365)
        at android.content.ContentResolver.openOutputStream(ContentResolver.java:341)
        at com.sonyericsson.android.camera.CameraActivity.copyContentToExtraOutputUri(CameraActivity.java:1680)
        at com.sonyericsson.android.camera.CameraActivity.setResult(CameraActivity.java:1639)
        at com.sonyericsson.android.camera.view.CameraWindow.onStoreComplete(CameraWindow.java:1405)
        at com.sonyericsson.android.camera.PhotoController.onStoreComplete(PhotoController.java:879)
        at com.sonyericsson.android.camera.TakenStatus.notifyComplete(TakenStatus.java:83)
        at com.sonyericsson.android.camera.ImageManager$StoreDataHandler.handleMessage(ImageManager.java:960)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:138)
        at android.app.ActivityThread.main(ActivityThread.java:3701)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:507)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
        at dalvik.system.NativeStart.main(Native Method)

由于我还没有收到任何更好的解决我的问题的办法,我分享了我自己得到的。我 通过在下面的方法中添加dir.setWritable(true,false)解决了我的问题,并在API10上进行了测试:

private Uri getImageUri() {
    ContextWrapper cw = new ContextWrapper(this);
    File dir = cw.getDir("dcim", Context.MODE_PRIVATE);
    dir.setWritable(true, false);
    File file = new File(dir, UUID.randomUUID().toString()+".png");
    Uri imgUri = Uri.fromFile(file);
    Log.d("DetailsModify.getImageUri", imgUri.toString());
    return imgUri;
}
它所做的是设置允许相机写入应用程序私有位置的权限(更多信息,请访问)。我希望这对某人有所帮助。

对于内维尔的评论:

如果

不起作用,请尝试使用

    "absolute_file_path".setWritable(true, false);

前者对我不起作用,但后者对我起作用。

我的问题是活动的主题。。我什么都试过了,什么都没用,我在用安卓11进行测试。。。因此,我通过从清单中删除以下代码来修复它


android:theme=“@style/FullscreenTheme”

值得一提:在onClick中删除这一行会让我返回结果\u确定:cameraIntent.putExtra(MediaStore.EXTRA\u输出,getImageUri());也许目录“dcim”不存在,从而导致返回结果的意图被取消?在文档()中,它说getDir“检索,如果需要,创建一个新目录,应用程序可以在其中放置自己的自定义数据文件。”。将查看是否创建了文件。我复制粘贴了此代码,但没有为我创建目录。调试还显示,由于某种原因,目录试图创建为“app_dcim”,这很奇怪。这就是我在我的应用程序中执行相同操作的方式,它工作正常:
新文件(context.getExternalFilesDir(null),新SimpleDataFormat(“yyyyMMdd_hhmmss”,Locale.getDefault()).format(new Date())+“.jpg”)谢谢。它确实与getExternalFilesDir一起工作,但我的目标是使用私有存储,而不是外部卡。
    dir.setWritable(true, false);
    "absolute_file_path".setWritable(true, false);