【发布时间】:2017-07-16 14:38:26
【问题描述】:
resultCode 从相机总是为 0。
摄像头调用代码:-
Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(Constants.ATTACH_IMAGE);
imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
imageIntent.putExtra("outputFormat",Bitmap.CompressFormat.JPEG.toString());
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP) {
if (imageIntent.resolveActivity(getContext().getPackageManager()) != null) {
startActivityForResult(imageIntent, 1);
}
imageIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
else {
List<ResolveInfo> resInfoList = getContext().getPackageManager().queryIntentActivities(imageIntent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
getContext().grantUriPermission(packageName, fileUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
startActivityForResult(imageIntent, Constants.ATTACH_IMAGE);
}
fileUri 看起来像:- content://com.dummyname1.dummname2.provider/external_files/DummyName/IMG_SR7896f7f4-8eb7-47bc-990c-d46ad04c2a7c.jpeg
OnActivityResult :-
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case Constants.ATTACH_IMAGE:
if(resultCode ==Constants.RESULT_OK){
attachmentType="IMAGE";
attachment.setEnabled(false);
attachLayout.setVisibility(View.GONE);
Toast.makeText(getActivity().getApplicationContext(), R.string.successfull_image, Toast.LENGTH_SHORT).show();
File actualImage = null;
try {
actualImage = FileUtil.from(getContext(),fileUri);
} catch (IOException e) {
e.printStackTrace();
}
if(actualImage!=null){
File compressedImage = new Compressor.Builder(getContext())
.setMaxWidth(1920).setMaxHeight(1440)
.setQuality(75)
.setCompressFormat(Bitmap.CompressFormat.JPEG)
.setDestinationDirectoryPath(Constants.SavePath).build().compressToFile(actualImage);
}
add_Comments_on_Media_add("Photo added!");
}
else
mediaName="";
break;
【问题讨论】:
-
也许您正在测试的特定相机应用程序不支持
content方案EXTRA_OUTPUT。 -
“我可以做些什么来使这项工作适用于所有设备?” - 摆脱所有这些代码。
ACTION_IMAGE_CAPTURE本质上是不可靠的,因为您无法控制第三方应用程序的行为。要么使用相机库,要么直接使用 Android 相机 API(android.hardware.Camera、android.hardware.camera2.*)。 -
我不知道你在寻找什么样的“代码 sn-p”。使用任一本机相机 API 都远远超出了“代码 sn-p”的范围。体面的camera libraries 将代码 sn-ps 作为其网站的一部分。
-
因为它是 Android SDK 本身中唯一简单的相机选项。 “简单”并不意味着“可靠”。对于您不是绝对需要拍照的情况,您可以告诉用户“对不起,您的相机应用程序似乎无法正常工作,请尝试另一个”,
ACTION_IMAGE_CAPTURE可以。但是您问“我该怎么做才能使这项工作适用于所有设备?”,因此ACTION_IMAGE_CAPTURE是不合适的。 -
在数千种 Android 设备型号上预装了 数百种 种不同的相机应用,还有更多可供用户自行安装。大多数相机应用程序都是从头开始编写的。没有兼容性测试,甚至谷歌自己的相机应用直到一年前才支持
content方案。
标签: android android-intent android-camera-intent