gpt4 book ai didi

android - 带有 EXTRA_OUTPUT 的 ACTION_IMAGE_CAPTURE 创建已处理的 "Handling Media Storage Error"

转载 作者:搜寻专家 更新时间:2023-11-01 07:52:52 26 4
gpt4 key购买 nike

我通过 startActivityForResult 使用 android.provider.MediaStore.ACTION_IMAGE_CAPTUREandroid.provider.MediaStore.EXTRA_OUTPUT 调用我的相机想要在我的 onActivityResult

中获取完整尺寸的捕获图像

但是当我在拍完照片后点击复选标记的那一刻,当它应该被送回的那一刻,我收到一条错误消息,大致翻译为“相机错误 - 保存您的其中一张图像时出现问题或剪辑”- 我可以关闭对话框或向 Google 开发团队发送反馈。

此时的 Logcat 输出为:

09-01 22:01:46.157  24523-24523/com.google.android.GoogleCamera E/CAM_FatalErrorHandler﹕ Handling Media Storage Failure:
java.lang.Exception
at com.android.camera.FatalErrorHandlerImpl.onMediaStorageFailure(FatalErrorHandlerImpl.java:37)
at com.android.camera.PhotoModule.onError(PhotoModule.java:274)
at com.android.camera.PhotoModule.onCaptureDone(PhotoModule.java:1289)
at com.android.camera.PhotoModule$8.onClick(PhotoModule.java:593)
at android.view.View.performClick(View.java:4781)
at android.view.View$PerformClick.run(View.java:19873)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5289)
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:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:115)
09-01 22:01:46.158 24523-24523/com.google.android.GoogleCamera E/CAM_CameraUtil﹕ Show fatal error dialog

我的代码(清除了不相关的部分):

private File tmpFile;
private Uri tmpFileURI;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{

// TempFile needs to be created for the camera to store the fullsize captured image
// tmpFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + MainActivity.APP_BASE_FOLDER + "/tmp.jpg");
try
{
tmpFile = File.createTempFile("my_app", ".jpg");
} catch (IOException e)
{
e.printStackTrace();
}
tmpFileURI = Uri.fromFile(tmpFile);

chooseCamera.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{

takePicture = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
takePicture.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, tmpFileURI);
startActivityForResult(takePicture, CreateModifiyEventFragment.CHOOSE_BY_CAMERA);//zero can be replaced with any action code

}
});


chooseLibrary.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{

pickPhoto = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickPhoto, CreateModifiyEventFragment.CHOOSE_BY_LIBRARY);//one can be replaced with any action code

}
});

}

看到的常量是这样声明的:

public final static int CHOOSE_BY_CAMERA = 1;
public final static int CHOOSE_BY_LIBRARY = 0;

永远不会到达回调代码,所以我将为您节省更多代码。你可以看到我通过 tmpFile 和外部存储上的普通文件进行了尝试。

还设置了权限

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

我不知道是什么触发了这个错误,也不知道我错过了什么。我使用其他 SO 答案来创建此代码,但没有发现任何差异。

如有任何帮助,我们将不胜感激。提前致谢!

最佳答案

File.createTempFile() 不太可能在 Android 上为您提供有用的东西。更重要的是,你无法知道第三方相机应用程序是否可以在那里写入。选择外部存储上的位置(例如,getExternalFilesDir()Environment.getExternalStoragePublicDirectory()):

package com.commonsware.android.camcon;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import java.io.File;

public class CameraContentDemoActivity extends Activity {
private static final int CONTENT_REQUEST=1337;
private File output=null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File dir=
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);

output=new File(dir, "CameraContentDemo.jpeg");
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(output));

startActivityForResult(i, CONTENT_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == CONTENT_REQUEST) {
if (resultCode == RESULT_OK) {
Intent i=new Intent(Intent.ACTION_VIEW);

i.setDataAndType(Uri.fromFile(output), "image/jpeg");
startActivity(i);
finish();
}
}
}
}

此外,您不需要 CAMERA 权限,因为您不是在拍照——您是在请求第三方应用拍照。

关于android - 带有 EXTRA_OUTPUT 的 ACTION_IMAGE_CAPTURE 创建已处理的 "Handling Media Storage Error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32340208/

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