另一个奇怪的问题。在通过意图使用相机时总是得到RESULT_CANCELLED(这是一个问题)。更相关的背景:
我将setOnClickListener分配给活动中的ImageView'的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):
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST) {
Log.d("DetailsModify", "onActivityResult code " + resultCode);
if (resultCode == RESULT_OK) {
更新:错误由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)
答案 0 :(得分:0)
由于我没有收到任何问题的更好解决方案,所以我可以分享自己的问题。一世 通过在下面的方法中添加 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;
}
它的作用是设置权限,允许Camera写入应用程序的私有位置(http://developer.android.com/reference/java/io/File.html#setWritable%28boolean,%20boolean%29处的更多信息)。我希望能帮助别人。
答案 1 :(得分:0)
对NeviQ-Or的评论:
如果
dir.setWritable(true, false);
不起作用,请尝试使用
"absolute_file_path".setWritable(true, false);
前者不适合我,但后者确实如此。
答案 2 :(得分:0)
我的问题在于活动的主题。我尝试了一切,但没有任何效果,我正在使用 android 11 进行测试...所以我通过从清单中删除以下代码来修复它..
android:theme="@style/FullscreenTheme"