【问题标题】:Default Camera Activity Not Finishing Upon OK button press按下 OK 按钮后默认相机活动未完成
【发布时间】:2011-09-01 22:24:20
【问题描述】:

我正在从我的活动中调用默认摄像头,然后处理 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();
            }
    }

【问题讨论】:

  • 确保您授予了存储权限

标签: android camera nexus-s


【解决方案1】:

我想我也遇到了同样的问题。

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

-- 编辑--

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

【讨论】:

  • 嗯,这是很久以前的事了,我实际上不记得我是如何解决这个问题的,但感谢您发布您的解决方案@qedejavu ^.^
  • 嗨 Rahul,实际上我确实检查了该文件夹的存在,它确实存在,并且图片存储在那里,但是“确定”按钮仍然没有让我回到我的活动。所以,@qedejavu 写的似乎不是解决方案。你能回忆一下你是如何解决这个问题的吗?
  • 当本机相机应用程序无权访问您尝试将其保存到的目录时,也会发生这种情况。例如,原生相机应用无法访问您应用的私有存储空间。
【解决方案2】:

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

希望这会有所帮助 =)

【讨论】:

    【解决方案3】:

    请检查一下

    案例一:

    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.图像存储在自定义文件夹中。 湾。如果“System.currentTimeMillis()”更改为 (“new Date().toString()”),图像不会保存并且相机不会返回到我的活动。 (可能是因为“System.currentTimeMillis”没有空格,而“new Date().toString()”可能有一些特殊字符和空格) 情况 2: 一种。图像存储在相机文件夹中

    谢谢大家

    【讨论】:

      【解决方案4】:

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

      希望这对你有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-17
        • 2010-11-07
        • 1970-01-01
        相关资源
        最近更新 更多