1

我正在开发我的第一个 android 应用程序并尝试创建一个意图来启动相机应用程序,拍照,然后返回带有图片 Uri 的应用程序。

当我使用以下代码时,它运行良好,但我只能拍摄低质量的照片。

    intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, RESULT_TAKE_PICTURE);

但是,当我尝试定义文件目录以保存高质量的图片时,相机应用程序的“确定”按钮无法正常工作,并且我的图片没有保存……而且我绝对没有错误消息。我的猜测是该应用程序无法在我提供的目录上写入,但我不明白为什么以及我应该做什么......

这是代码:

    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>
4

3 回答 3

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" />

希望它会有所帮助。

于 2013-01-12T06:49:06.717 回答
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

于 2013-01-12T07:21:40.457 回答
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";

现在一切正常!:)

于 2013-01-13T23:46:59.140 回答