Java 无法在Android中捕获图像 设备:OnePlus 6 存储:8GB RAM+128GB ROM 安卓版本:10 氧气操作系统版本:OP6_02_BETA_31
我使用下面的代码捕获图像。除了上述配置之外,该代码在几乎所有设备中都能完美工作 应用程序正在打开相机,我无法捕获图像。使用默认的摄像头应用程序,我没有得到任何例外。拍摄完照片后,会出现一个勾号按钮来确认图像。但那个按钮是不可点击的。所以,我用了一个不同的相机应用程序来捕捉图像。它在照相机应用程序中返回“保存照片失败”错误。没有抛出异常 我在控制台中从{p:7857;U:10456}中得到了这条消息“E/ContentProviderNative:onTransact error”。请帮我解决这个问题Java 无法在Android中捕获图像 设备:OnePlus 6 存储:8GB RAM+128GB ROM 安卓版本:10 氧气操作系统版本:OP6_02_BETA_31,java,android,android-camera,Java,Android,Android Camera,我使用下面的代码捕获图像。除了上述配置之外,该代码在几乎所有设备中都能完美工作 应用程序正在打开相机,我无法捕获图像。使用默认的摄像头应用程序,我没有得到任何例外。拍摄完照片后,会出现一个勾号按钮来确认图像。但那个按钮是不可点击的。所以,我用了一个不同的相机应用程序来捕捉图像。它在照相机应用程序中返回“保存照片失败”错误。没有抛出异常 我在控制台中从{p:7857;U:10456}中得到了这条消息“E/ContentProviderNative:onTransact error”。请帮我解决这个
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
try {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
String appDirPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + context.getString(R.string.app_name);
appDir = new File(appDirPath);
if (!appDir.exists()) {
appDir.mkdirs();
}
mFileCaptured = new File(appDir, tag + ".jpg");
mImageCaptureUri = FileProvider.getUriForFile(context,
context.getApplicationContext().getPackageName() + ".provider",
mFileCaptured);
}
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) {
intent.setClipData(ClipData.newRawUri("", mImageCaptureUri));
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
intent.putExtra("return-data", true);
context.startActivityForResult(intent, 10000);
} catch (Exception e) {
Crashlytics.logException(e);
Crashlytics.log(e.getLocalizedMessage());
}
Intent Intent=新意图(MediaStore.ACTION\u IMAGE\u CAPTURE);
试一试{
String state=Environment.getExternalStorageState();
if(环境、介质、安装等于(状态)){
字符串appDirPath=Environment.getExternalStorageDirectory().getAbsolutePath()+“/”+context.getString(R.String.app_name);
appDir=新文件(appDirPath);
如果(!appDir.exists()){
appDir.mkdirs();
}
mFileCaptured=新文件(appDir,tag+“.jpg”);
mImageCaptureUri=FileProvider.getUriForFile(上下文,
context.getApplicationContext().getPackageName()+“.provider”,
mfile(捕获);
}
如果(Build.VERSION.SDK_INT您正在创建的文件(mFileCaptured)有问题。您刚刚创建了文件的路径,但该文件在文件系统中不存在,因此该文件的URI为空
尝试这样做:-
if (!mFileCaptured.exists()) {
mFileCaptured.createNewFile();
}
如果上述代码不起作用,请尝试此操作
private static Uri getSharableImageUri(Context context) {
File outputDir = context.getCacheDir();
File imagePath = new File(outputDir, context.getString(R.string.app_name));
if (!imagePath.exists()) {
imagePath.mkdir();
}
File tempFile = new File(imagePath, "image.jpg");
Uri uri = null;
try {
if (!tempFile.exists()) {
tempFile.createNewFile();
}
uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", tempFile);
} catch (Exception e) {
e.printStackTrace();
}
return uri;
}
并使用此方法设置URI
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
try {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
mImageCaptureUri = getSharableImageUri(context);
}
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) {
intent.setClipData(ClipData.newRawUri("", mImageCaptureUri));
}
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
intent.putExtra("return-data", true);
context.startActivityForResult(intent, 10000);
} catch (Exception e) {
Crashlytics.logException(e);
Crashlytics.log(e.getLocalizedMessage());
}
Intent Intent=新意图(MediaStore.ACTION\u IMAGE\u CAPTURE);
试一试{
String state=Environment.getExternalStorageState();
if(环境、介质、安装等于(状态)){
mImageCaptureUri=getSharableMageUri(上下文);
}
如果(Build.VERSION.SDK_INT您正在创建的文件(mFileCaptured)有问题。您刚刚创建了文件的路径,但该文件在文件系统中不存在,因此该文件的URI为空
尝试这样做:-
if (!mFileCaptured.exists()) {
mFileCaptured.createNewFile();
}
如果上述代码不起作用,请尝试此操作
private static Uri getSharableImageUri(Context context) {
File outputDir = context.getCacheDir();
File imagePath = new File(outputDir, context.getString(R.string.app_name));
if (!imagePath.exists()) {
imagePath.mkdir();
}
File tempFile = new File(imagePath, "image.jpg");
Uri uri = null;
try {
if (!tempFile.exists()) {
tempFile.createNewFile();
}
uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", tempFile);
} catch (Exception e) {
e.printStackTrace();
}
return uri;
}
并使用此方法设置URI
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
try {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
mImageCaptureUri = getSharableImageUri(context);
}
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) {
intent.setClipData(ClipData.newRawUri("", mImageCaptureUri));
}
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
intent.putExtra("return-data", true);
context.startActivityForResult(intent, 10000);
} catch (Exception e) {
Crashlytics.logException(e);
Crashlytics.log(e.getLocalizedMessage());
}
Intent Intent=新意图(MediaStore.ACTION\u IMAGE\u CAPTURE);
试一试{
String state=Environment.getExternalStorageState();
if(环境、介质、安装等于(状态)){
mImageCaptureUri=getSharableMageUri(上下文);
}
如果在Android 10下(Build.VERSION.SDK_INT,则无法再写入外部存储
改为使用GetFileDir()、GetExternalFileDir()或GetExternalFileDirs()
或者请求mediastore提供一个有效的uri,以便摄像头应用程序将图片写入其中。在Android 10下,您无法再写入外部存储
改为使用GetFileDir()、GetExternalFileDir()或GetExternalFileDirs()
或者请求mediastore提供一个有效的uri,以便摄像头应用程序将图片写入其中。我遵循了从的实现
现在,它对我起作用了。我遵循了来自的实现
现在,它对我起作用了