双保存图像图像

2023-09-06 04:29:23 作者:自由如风

我已经使用手册 http://developer.android.com/guide/topics/media/camera.html 但我有它的问题。这code保存图像的两倍。第一张照片被保存在/ SD卡/ DCIM /摄像机和第二张照片保存在/ SD卡/ PicturesMyCameraApp。我怎样才能删除第一个保存在/ SD卡/ DCIM /摄像机。 感谢您的帮助

 公共无效的onClick(视图v){
    // TODO自动生成方法存根
    开关(v.getId()){
        案例R.id.imageButton1:
            意图I =新的意图(MediaStore.ACTION_IM​​AGE_CAPTURE);
            i.putExtra(MediaStore.EXTRA_OUTPUT,getOutputMediaFileUri());
            startActivityForResult(我,CAPTURE_IMAGE_ACTIVITY_REQUEST_ code);
        打破;
    }
}
@覆盖
公共布尔onCreateOptionsMenu(功能菜单){
    MenuInflater充气= getMenuInflater();
    inflater.inflate(R.menu.mainmenu,菜单);
    返回true;
}

@覆盖
公共布尔onOptionsItemSelected(菜单项项){
    开关(item.getItemId()){
        案例R.id.item1:
            / *意向意图=新的意图(ZodiacActivity.this,AboutActivity.class);
            startActivity(意向); * /
        打破;
        案例R.id.item2:
            this.moveTaskToBack(真正的);
        打破;
    }
    返回true;
}

@覆盖
保护无效onActivityResult(INT申请code,INT结果code,意图数据){
    super.onActivityResult(要求code,因此code,数据);

    如果(要求code == CAPTURE_IMAGE_ACTIVITY_REQUEST_ code){
        如果(结果code == RESULT_OK){
            Toast.makeText(这一点,Uloženo做:+ getOutputMediaFileUri()的toString(),Toast.LENGTH_LONG).show();
        }
        其他 {
            返回;
        }
    }
}

公共乌里getOutputMediaFileUri(){
      返回Uri.fromFile(getOutputMediaFile());
}

公共文件getOutputMediaFile(){
    //为了安全起见,你应该检查SD卡安装
    //在此之前使用Environment.getExternalStorageState()。

    文件mediaStorageDir =新的文件(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),MyCameraApp);
    //这个位置效果最好,如果你希望共享的创建的图像
    //应用程序之间,坚持后,您的应用程序已被卸载。

    //创建存储目录,如果它不存在
    如果(!mediaStorageDir.exists()){
        如果(!mediaStorageDir.mkdirs()){
            Log.d(MyCameraApp,无法创建目录);
            返回null;
        }
    }

    //创建一个媒体文件名
    字符串的timeStamp =新的SimpleDateFormat(YYYYMMDD_HHMMSS)格式(新的Date())。
    文件媒体文件;
    媒体文件=新的文件(mediaStorageDir.getPath()+文件分割符+IMG_+的timeStamp +.JPG);

    返回媒体文件;
}
 

解决方案

您可以简单地删除文件:

 字符串pathToFile =/sdcard/DCIM/Camera/imagename.jpg;
布尔成功=新的文件(pathToFile).delete();

如果(成功){
//删除文件成功
}其他{
//没有成功
}
 
像素级双采样存储技术可提高CMOS图像的实时处理速度

修改

获取最新拍摄的照片中/ SD卡/ DCIM /摄像头:

 文件[]的图像=新的文件(/ SD卡/ DCIM /摄像机)listFiles()。
文件latestSavedImage =图像[0];
的for(int i = 1; I< images.length ++我){
 如果(图像[I] .lastModified()> latestSavedImage.lastModified()){
   latestSavedImage =图像;
 }
}
 

请注意,在code未测试!

I have used manual on http://developer.android.com/guide/topics/media/camera.html but I have a problem with it. This code save image twice. First picture is saved in /sdcard/DCIM/Camera and the second picture is saved in /sdcard/PicturesMyCameraApp. How can I remove the first saving to /sdcard/DCIM/Camera. Thanks for help

public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
        case R.id.imageButton1:
            Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            i.putExtra(MediaStore.EXTRA_OUTPUT, getOutputMediaFileUri());
            startActivityForResult(i, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
        break;
    }
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.mainmenu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {
        case R.id.item1:
            /*Intent intent = new Intent(ZodiacActivity.this, AboutActivity.class);
            startActivity(intent);*/
        break;
        case R.id.item2:
            this.moveTaskToBack(true);
        break;
    }
    return true;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);  

    if (requestCode==CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
        if (resultCode==RESULT_OK) {
            Toast.makeText(this, "Uloženo do: " + getOutputMediaFileUri().toString(), Toast.LENGTH_LONG).show();
        }
        else {
            return;
        }
    }
}

public Uri getOutputMediaFileUri(){
      return Uri.fromFile(getOutputMediaFile());
}

public File getOutputMediaFile(){
    // To be safe, you should check that the SDCard is mounted
    // using Environment.getExternalStorageState() before doing this.

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyCameraApp");
    // This location works best if you want the created images to be shared
    // between applications and persist after your app has been uninstalled.

    // Create the storage directory if it does not exist
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            Log.d("MyCameraApp", "failed to create directory");
            return null;
        }
    }

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile;
    mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg");

    return mediaFile;
}

解决方案

You can simply delete the file:

String pathToFile = "/sdcard/DCIM/Camera/imagename.jpg";
boolean success = new File(pathToFile).delete();

if(success){
// deleting file succeeded
}else{
// it didn't succeed
}

Edit

Get the latest taken picture in /sdcard/DCIM/Camera:

File[] images = new File("/sdcard/DCIM/Camera").listFiles();
File latestSavedImage = images[0];
for(int i=1; i<images.length; ++i){
 if(images[i].lastModified() > latestSavedImage.lastModified()){
   latestSavedImage = image;
 }
}

Note, the code was not tested!