我正在开发我的第一个Android应用程序,并试图创建一个启动相机应用程序的意图,拍照,然后回到图片的Uri应用程序。
当我使用以下代码时,它运行良好,但我只能拍摄低质量的照片。
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, RESULT_TAKE_PICTURE);
当我尝试定义文件目录以便以高质量保存图片时,相机应用程序的OK按钮只是拒绝工作而我的图片没有保存...而且我绝对没有错误信息。 我的猜测是应用程序无法写入我提供的目录,但我不明白为什么以及我应该做什么......
以下是代码:
File file = new File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
imageFileName);
imageUri = Uri.fromFile(file);
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, RESULT_TAKE_PICTURE);
我的权限:
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
答案 0 :(得分:0)
这一行
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
错了。意图启动相机应该是这样的
Intent cameraIntent = new Intent("android.media.action.IMAGE_CAPTURE");
添加此行,您就完成了。
确保在清单中添加了这两行,以便在Android应用程序中使用相机。
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
希望它会有所帮助。
答案 1 :(得分:0)
我的方法略有不同,但看看这段代码是否有帮助。它在我的应用程序中运行良好。
Intent getCameraImage = new Intent("android.media.action.IMAGE_CAPTURE");
File cameraFolder;
if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
cameraFolder = new File(android.os.Environment.getExternalStorageDirectory(),"your_folder_name");
else
cameraFolder= StatusUpdate.this.getCacheDir();
if(!cameraFolder.exists())
cameraFolder.mkdirs();
File photo = new File(Environment.getExternalStorageDirectory(), "your_folder_name/camera_snap.jpg");
getCameraImage.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
Uri initialURI = Uri.fromFile(photo);
startActivityForResult(getCameraImage, reqcdCameraImage);
这将在指定的文件夹中保存带有名称和扩展名的图像: camera_snap.jpg ,并且还会在 Uri initialURI 中投射该图像以供您显示也许在ImageView
。
答案 2 :(得分:0)
似乎问题有两个不同的来源:首先,模拟器似乎无法访问外部存储。我以某种方式通过减少设备的内部和外部来解决这个问题。外部存储器大小。
第二个问题来自我的照片名称。实际上,我使用以下方法生成名称:
String timeStamp = SimpleDateFormat.getDateTimeInstance().format(new Date());
String imageFileName = "picture_" + timeStamp + ".jpg";
使用“:”字符生成名称,使相机无法创建文件。我将其替换为以下内容:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss");
String timeStamp = dateFormat.format(new Date());
String imageFileName = "picture_" + timeStamp + ".jpg";
现在一切正常! :)