默认相机活动未完成按OK按钮

时间:2011-09-01 22:24:20

标签: android camera nexus-s

我从我的活动中调用默认摄像头,然后处理onActivityResult。我的代码似乎在LG Ally上工作正常,在拍摄照片时没有确认。但是,当我在Nexus S上运行相同的应用程序时,它会在返回我的活动之前提示我“Ok”,“Retake”或“Cancel”。虽然“取消”有效,但在不保存图片的情况下返回我的活动,“确定”似乎没有任何效果,甚至没有返回我的活动。

我的代码如下:

private void captureImage() {

    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        File path = new File(Environment.getExternalStorageDirectory().getPath() + "/Images/" + (new UserContextAdapter(this)).getUser() + "/");
        path.mkdirs();
        File file = new File(path, "Image_Story_" + mRowId.toString() + ".jpg");

        newImageUri = Uri.fromFile(file);

        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, newImageUri);

        startActivityForResult(intent, CAPTURE_IMAGE);
    }

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {

    switch (requestCode) {
    case CAPTURE_IMAGE:
        switch (resultCode ) {
        case 0:
            Log.i("CAPTURE", "Cancelled by User");
            break;
        case -1:
            mImageUri = newImageUri;
            setImageFromUri();
            }
    }

4 个答案:

答案 0 :(得分:15)

我认为我遇到了完全相同的问题。

如果保存图片的路径不正确,相机将不会返回您的应用程序。一旦我确定目录存在,一切正常。确保目录存在,然后它应该工作。

- 编辑 -

我刚刚看到,你打电话给path.mkdirs();,但我认为它不起作用。正如你可以在android文档中看到的那样“请注意,此方法在失败时不会抛出IOException。调用者必须检查返回值。”请务必检查目录是否确实存在。

HTH

答案 1 :(得分:1)

另外,如果您使用上面的<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />,请确保您的应用已Environment.getExternalStorageDirectory().getPath()

希望这有助于=)

答案 2 :(得分:1)

请检查

案例1:

Uri newImageUri = null;

File path = new File(Environment.getExternalStorageDirectory().getPath() + "/Images/");

path.mkdirs();

boolean setWritable = false;

setWritable = path.setWritable(true, false);

File file = new File(path, "Image_Story_" + System.currentTimeMillis() + ".jpg");

newImageUri = Uri.fromFile(file);

Log.i("MainActivity", "new image uri to string is " + newImageUri.toString());

Log.i("MainActivity", "new image path is " + newImageUri.getPath());            

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT, newImageUri);

startActivityForResult(intent, REQUEST_CODE_CAPTURE_IMAGE);

案例2:

String fileName = "" + System.currentTimeMillis() + ".jpg";

ContentValues values = new ContentValues();

values.put(MediaStore.Images.Media.TITLE, fileName);

values.put(MediaStore.Images.Media.DESCRIPTION, "Image capture by camera");

values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");

Uri imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

Log.i("MainActivity", "new image uri to string is " + imageUri.toString());

Log.i("MainActivity", "new image path is " + imageUri.getPath());

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);

startActivityForResult(intent, REQUEST_CODE_CAPTURE_IMAGE);

在上述两种情况下,我都可以通过相机在nexus上保存图像 在案例1中: a.Image存储在自定义文件夹中。 湾如果“System.currentTimeMillis()”更改为(“new Date()。toString()”)图像未保存,相机不会返回到我的活动。 (可能是因为“System.currentTimeMillis”没有空格而“new Date()。toString()”可能有一些特殊字符和空格) 在案例2中: 一个。图像存储在相机文件夹

感谢所有

答案 3 :(得分:0)

我有同样的问题。你只需做一份工作,在你的手机存储检查中是否有图片目录。如果你没有这样的库,那么手动制作

希望这适合你。