gpt4 book ai didi

android - 相机结果始终返回 RESULT_CANCELED

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:58 24 4
gpt4 key购买 nike

我想用我的相机拍照。我只是暂时需要它们,所以我执行以下操作:

private void takePicture() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

if (intent.resolveActivity(this.getActivity().getPackageManager()) != null) {
try {
this.imageFile = File.createTempFile("CROP_SHOT", ".jpg", this.getActivity().getCacheDir());

intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(this.imageFile));
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);

this.startActivityForResult(intent, Globals.REQUEST_TAKE_PHOTO);
} catch (IOException e) {
e.printStackTrace();
}
}
}

不幸的是,我的 onActivityResult 中的结果代码 RESULT_CANCELED

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.v("PictureEdit", "onActivityResult");

super.onActivityResult(requestCode, resultCode, data);

if(resultCode == Activity.RESULT_OK) {
if(requestCode == Globals.REQUEST_TAKE_PHOTO) {
Log.v("PictureEdit", "onActivityResult take photo");

this.startCropImage(Uri.fromFile(this.imageFile));
} else if (requestCode == Globals.REQUEST_PICK_PHOTO) {
Log.v("PictureEdit", "onActivityResult pick photo");

this.startCropImage(data.getData());
} else if (requestCode == Globals.REQUEST_CROP_PHOTO) {
Log.v("PictureEdit", "onActivityResult crop photo");

this.imageEncoded = data.getStringExtra(Globals.KEY_IMAGE_ENCODED);

this.imageView.setImageBitmap(Images.decodeImage(imageEncoded));
this.buttonSave.setEnabled(true);
} else {
Log.v("PictureEdit", "onActivityResult requestCode: " + requestCode + ", result: " + resultCode);
}
} else {
Log.v("PictureEdit", "onActivityResult resultCode is not ok: " + resultCode);
}
}

到目前为止,我在 stackoverflow 和网络上找到的所有解决方案都没有解决我的问题。我使用缓存目录创建临时文件:

File.createTempFile("CROP_SHOT", ".jpg", this.getActivity().getCacheDir());

我有正确的权限:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

从我的智能手机中挑选图像总是可以正常工作:

private void pickPicture() {
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

this.startActivityForResult(intent, Globals.REQUEST_PICK_PHOTO);
}

那么为什么相机总是返回 RESULT_CANCELED

它出现在搭载 Android 6.0 的 Nexus 4 和搭载 Android 4.2 的三星 Galaxy S III 上。

最佳答案

I use the cache directory for creating a temp file:

首先,第三方相机应用无权使用您应用在 internal storage 上的私有(private)缓存目录。 .

其次,您不应该创建该文件。相机应用程序应该创建文件。一些相机应用程序可能会混淆并拒绝覆盖您的文件。

因此,创建一个指向 external storage 上的位置的 File 对象(例如,getExternalCacheDir()),但还没有创建文件。使用该 File 对象作为您的 EXTRA_OUTPUT 值的基础。

另请注意,MediaStore.EXTRA_VIDEO_QUALITY 用于录制视频;它对 ACTION_IMAGE_CAPTURE 没有意义。

关于android - 相机结果始终返回 RESULT_CANCELED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35272403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com