0

Nutgat 장치에서 이미지를 캡처하고 ABC 폴더에 이미지를 저장하면 정상적으로 작동합니다. 이미지를 캡처 한 후 서버로 보내면 일단 업로드되면 ABC 폴더에서 이미지가 삭제 될 때까지 삭제됩니다.하지만 카메라가 ABC 폴더에 저장된 이미지 2 개와 DCIM/카메라에 저장된 이미지 2 개를 생성하는 것을 확인했습니다. 폴더. 또한 내가 저장하는 동안 촬영 된 이미지의 이름을 지정하지만, DCIM/카메라에 한하고있어 시스템으로 생성 된 이름, DCIM/카메라 폴더에서 해당 이미지를 삭제하는 방법을 안내하시기 바랍니다있다 여기에카메라로 촬영 한 이미지 두 장이 DCIM/카메라 폴더에서 삭제할 수 없습니다.

열기 카메라 내 코드

private void openCamera() { 
    destination = null; 
    PackageManager pm = getPackageManager(); 
    if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { 
     try { 
      String originalfileName = getFilenameOrgImage(); 
      File root = new File(ConstantData.IMAGE_STORAGE_LOCAL_PATH + File.separator); 
      if (!root.exists()) { 
       root.mkdirs(); 
      } 
      destination = new File(originalfileName); 
      Log.d("destination",destination.getAbsolutePath()); 
       Uri photoURI = FileProvider. 
         getUriForFile(this, getPackageName() + ".provider", destination); 
       Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
       if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
       } 

     } catch (Exception e) { 
      e.printStackTrace(); 
      CommonMethods.showToast(this, getResources().getString(R.string.please_try_again)); 
     } 
    } else { 
     CommonMethods.showToast(this, getResources().getString(R.string.camera_doesnt_support)); 
    } 
} 
입니다

onActivityResult를

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     try { 
      if (resultCode == Activity.RESULT_OK) { 
       if (requestCode == REQUEST_IMAGE_CAPTURE) { 
        FileInputStream in = new FileInputStream(destination); 
        BitmapFactory.Options options = new BitmapFactory.Options(); 
        options.inSampleSize = 10; 
        Log.d("IMAGE",destination.getAbsolutePath()); 
        treeDetailsModels.get(imgClickPos).setName(imagename); 
        treeDetailsModels.get(imgClickPos).setImgDestinationPath(destination); 

        View v = viewPager.findViewWithTag("pos" + imgClickPos); 
        ImageView ivBackground = (ImageView) v.findViewById(R.id.ivPhoto); 
        Bitmap bmp = BitmapFactory.decodeStream(in, null, options); 
        ivBackground.setImageBitmap(bmp); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

사용자 정의 위치

public static final String IMAGE_STORAGE_LOCAL_PATH = Environment.getExternalStorageDirectory().getPath().toString() + "/ABC"; 

추가 에드는이

<provider 
      android:name="android.support.v4.content.FileProvider" 
      android:authorities="${applicationId}.provider" 
      android:exported="false" 
      android:grantUriPermissions="true"> 
      <meta-data 
       android:name="android.support.FILE_PROVIDER_PATHS" 
       android:resource="@xml/provider_paths" /> 
     </provider> 

경로

<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <external-path name="external_files" path="ABC/"/> 
</paths> 
+0

귀하의 게시물과 코드가 메쉬입니다. 당신은 ABC 폴더에 대해 이야기하지만 ABC는 당신의 코드에 아무 것도 없습니다. 대신에 ConstantData.IMAGE_STORAGE_LOCAL_PATH를 사용합니다. 그런 다음 onActivityResult에서 비트 맵을 사용합니다. 왜? 문제와 관련이 있습니까? 그리고 당신은 compressImage (destination.getAbsolutePath()); 당신이 말하지 않은 성명서. 그리고 아무도 그것이 무엇을하는지 모릅니다. 또한 파일 제공자는 언급하지 않았습니다. onActivityResult에서 모든 코드를 제거하고 여전히 두 개의 파일이 있는지 검사합니다. – greenapps

답변

1

을 명시하기 위해 제공하지만 두 개의 이미지 중 하나 ABC 폴더에 저장하고 DCIM/카메라 폴더에 다른 하나를 만드는 카메라를 발견했습니다

코드가 타사 카메라 앱을 시작하고 있습니다. 이 응용 프로그램은 다른 프로그래머가 작성했으며, 프로그래머는 원하는대로 할 수 있습니다. 그들은 이미지를 두 번 저장해서는 안되지만 환영합니다.

DCIM/카메라 폴더에서 해당 이미지를 삭제하는 방법을 안내하시기 바랍니다

재생에서 사용할 다른 사전 설치된 카메라 애플 리케이션과 수백 개 카메라 애플 리케이션의 수백 ~ 20 억 안드로이드 장치가있다

상점 및 다른 곳에. 수백 가지 카메라 앱 중 하나라도 귀하의 코드에 의해 실행될 수 있습니다. 이러한 카메라 앱은 원하는대로 할 수 있습니다. 일부는 사진의 여분 사본을 만들 수 있습니다. 일부는 사진을 서버에 업로드 할 수 있습니다. 일부는 사진을 수정할 수 있습니다. 대부분의 사람들이이 일을하지 않을 것입니다.하지만 투표를하지는 마십시오.

그래서, 당신의 선택은 다음과 같습니다 ACTION_IMAGE_CAPTURE를 사용

  1. 같은 이미지의 추가 복사본 같은 일부 카메라 애플리케이션의 부작용 라이브, 또는

  2. 정지 사진을 찍고합니다 (을 중 카메라 하드웨어를 사용하여 직접 사진을 찍거나 사진 촬영을 완전히 중지하십시오)