【问题标题】:Android Camera intent creating two filesAndroid相机意图创建两个文件
【发布时间】:2011-05-29 17:44:31
【问题描述】:

我正在制作一个程序,它会拍照然后显示它的缩略图。 使用模拟器时一切顺利,丢弃按钮删除照片。 但是在真实设备上,相机意图将图像保存在 imageUri 变量中,第二个变量的命名就像我刚刚打开相机并自己拍照一样。

private static final int CAMERA_PIC_REQUEST = 1337;  
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.camera);

    //start camera
    values = new ContentValues();
    values.put(MediaStore.Images.Media.TITLE, "New Picture");
    values.put(MediaStore.Images.Media.DESCRIPTION,"From your Camera");
    imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    image = (ImageView) findViewById(R.id.ImageView01);
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    startActivityForResult(intent, CAMERA_PIC_REQUEST);


    //save the image buttons
    Button save = (Button) findViewById(R.id.Button01);
    Button close = (Button) findViewById(R.id.Button02);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) {
        try{
            thumbnail = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
            image.setImageBitmap(thumbnail);
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
     else{
         finish();
     }
}

public void myClickHandler(View view) {
    switch (view.getId()) {
    case R.id.Button01:
        finish();
        break;
    case R.id.Button02:
        dicard();
    }
}

private void dicard(){
    getContentResolver().delete(imageUri, null, null);
    finish();
}

【问题讨论】:

  • 我在 HTC Incredible 上测试了该程序,它运行良好。这是 LG ALLY 手机的已知问题吗?

标签: android android-camera android-camera-intent


【解决方案1】:

某些 Android 手机将原始照片存储在图库中,而缩略图仅存储在您所在的位置。你对原始请求做了什么并不重要。我有两部不同的 HTC 手机在做这件事,还有很多其他品牌没有做。

我用另一种方式解决了这个问题。我对库中的每个项目都进行了查询,并将 BucketID 加载到一个数组中。当我的应用程序启动相机应用程序时,我会这样做。当相机应用程序返回时,我会进行相同的查询(最近添加了项目以节省时间)。我将此与我的原始列表进行比较并找到新的 BucketID。接下来,我将此图像的大小与我明确设置为输出的文件进行比较。如果它更大,我复制它,替换我拥有的。然后我删除该文件并将其从图库中删除。

痛苦的你知道什么!

[编辑] 当我发现一部手机没有保留唯一存储桶 ID 时,我不得不再次更改此设置...有关更多信息,请参阅此答案后面的链接中的我的帖子。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2023-04-11
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多