0

ImageViewViewPager을 사용하는 다른 이미지가 포함 된 응용 프로그램을 가지고 있습니다. ImageView을 통해 표시된 현재 이미지를 SD Storage에 저장하고 싶습니다. 하지만 항상 Phone Storage에 저장되었습니다. SD Card에 이미지를 저장하고 싶지 않으며 저장된 이미지가 Gallery에 표시되지 않는 이유는 무엇입니까? 친절하게이 문제에 좀 도와 :이미지 SD 카드 대신 전화 저장 공간에 저장되고 전화 갤러리에도 표시되지 않는 이유 왜?


public void SaveIamge() { 
     String root = Environment.getExternalStorageDirectory().toString(); 
     File myDir = new File(root + "/Cute_Baby_Images"); 
     myDir.mkdirs(); 
     Random generator = new Random(); 
     int n = 10000; 
     n = generator.nextInt(n); 
     String fname = "Image-"+ n +".jpg"; 
     File file = new File (myDir, fname); 
     int currentImagePos = viewPager.getCurrentItem(); 
     Drawable drawable = viewPager.getResources().getDrawable(images[currentImagePos]); 
     Bitmap finalBitmap = ((BitmapDrawable) drawable).getBitmap(); 

     if (file.exists()) file.delete(); 
     try { 
      FileOutputStream out = new FileOutputStream(file); 
      finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 

      out.flush(); 
      out.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     Toast.makeText(this, "Sucessfully Save Image", Toast.LENGTH_LONG).show(); 

    } 
+0

파일을 만들려면 https://developer.android.com/reference/android/content/Context.html#getExternalFilesDir(java.lang.String)을 확인하십시오. – Daivid

+0

친절하게 내 코드를 업데이트하고 링크를 이해하지 못했습니다. –

답변

0

Environment.getExternalDirectory() 반환 전화 저장. , SD 카드의 위치를 ​​확인 Find an external SD card location

는 이미지가 갤러리에 표시하려면 확인하려면 미디어 스캐너가 MediaScannerConnection.scanFile() 확인을 사용하여 파일을 검사하도록해야 Image, saved to sdcard, doesn't appear in Android's Gallery app

+0

외부 저장 장치 (SD 카드)를 가져 오는 기능은 무엇입니까? –

+0

이 답변보기 https://stackoverflow.com/a/15612964/5137352 –

+0

링크를 이해할 수 없습니다. 코드를 수정할 수 있습니까? 매우 감사 할 것입니다. –

0

라는 함수를 작성 getDirectory()

private static File getDirectory(String variableName, String... paths) { 
    String path = System.getenv(variableName); 
    if (!TextUtils.isEmpty(path)) { 
     if (path.contains(":")) { 
      for (String _path : path.split(":")) { 
       File file = new File(_path); 
       if (file.exists()) { 
        return file; 
       } 
      } 
     } else { 
      File file = new File(path); 
      if (file.exists()) { 
       return file; 
      } 
     } 
    } 
    if (paths != null && paths.length > 0) { 
     for (String _path : paths) { 
      File file = new File(_path); 
      if (file.exists()) { 
       return file; 
      } 
     } 
    } 

    //If any there is no SECONDARY STORAGE are detected return INTERENAL STORAGE 
    return Environment.getExternalStorageDirectory(); 
} 

코드를

public void SaveIamge() { 

    String root = getDirectory("SECONDARY_STORAGE").getAbsolutePath(); 
    File myDir = new File(root + "/Cute_Baby_Images"); 
    myDir.mkdirs(); 
    Random generator = new Random(); 
    int n = 10000; 
    n = generator.nextInt(n); 
    String fname = "Image-"+ n +".jpg"; 
    File file = new File (myDir, fname); 
    int currentImagePos = viewPager.getCurrentItem(); 
    Drawable drawable = viewPager.getResources().getDrawable(images[currentImagePos]); 
    Bitmap finalBitmap = ((BitmapDrawable) drawable).getBitmap(); 

    if (file.exists()) file.delete(); 
    try { 
     FileOutputStream out = new FileOutputStream(file); 
     finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 

     out.flush(); 
     out.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    Toast.makeText(this, "Sucessfully Save Image", Toast.LENGTH_LONG).show(); 
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + root))); 
} 

으로 변경하십시오. broadcast을 추가하여 MediaScanner에게 새 파일에 대한 파일 시스템을 다시 스캔하도록 알립니다. 이렇게하면 갤러리에 이미지가 표시되지 않는 문제를 해결할 수 있습니다.

+0

신청서에는 변경이 없습니다. 이미지는 외부 저장소가 아닌 내부 저장소에 다시 저장되고, 외부 저장소에 이미지를 저장하도록 친절하게 도와 주며 코드에는 갤러리의 이미지 만 표시됩니다. –

+0

@ AndroidLearner541 사용 권한을 붙여 넣기 –

+0

@ AndroidLearner541 수정 된 코드가 올바르게 작동하는지 확인 –