Android - 相机应用程序拒绝在提供目录时拍照

时间:2013-01-12 06:31:02

标签: android android-intent camera

我正在开发我的第一个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>

3 个答案:

答案 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";

现在一切正常! :)