2014-08-29 5 views
0

이미지를 sdcard에 저장하지만 전화의 갤러리에는 표시되지 않습니다. 폴더에 저장된 이미지를 볼 수는 있지만 폴더는 갤러리에 표시되지 않습니다.Android 갤러리에서 SD 카드 이미지가 어떻게 저장 되나요?

여기 내 코드는 어떻게 수정합니까? 돕는

img_icon.setOnLongClickListener(new View.OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 

      img_resim.buildDrawingCache(); 
      Bitmap bm = img_resim.getDrawingCache(); 

      OutputStream fOut = null; 

      Uri outputFileUri; 
      try { 
       root = new File(Environment.getExternalStorageDirectory() 
         + File.separator + "folder_name" + File.separator); 
       root.mkdirs(); 
       File sdImageMainDirectory = new File(root, "myPicName.jpg"); 
       outputFileUri = Uri.fromFile(sdImageMainDirectory); 
       fOut = new FileOutputStream(sdImageMainDirectory); 
      } catch (Exception e) { 
       Toast.makeText(context.getActivity(), 
         "Error occured. Please try again later.", 
         Toast.LENGTH_SHORT).show(); 
      } 

      try { 
       bm.compress(Bitmap.CompressFormat.PNG, 100, fOut); 
       fOut.flush(); 
       fOut.close(); 
      } catch (Exception e) { 

      } 

      context.getActivity() 
        .sendBroadcast(
          new Intent(
            Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, 
            Uri.parse("file://" 
              + Environment 
                .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)))); 

      return true; 
     } 
    }); 

    return rowView; 
} 

감사합니다 ..

+0

전화 갤러리를 올바르게 닫은 다음 다시 전화 갤러리 앱을 시작하십시오. – Jamil

답변

1

귀하의 문제가 여기에있다 : 당신은 Environment.DIRECTORY_PICTURES의 모든 파일을 인덱스를 다시 안드로이드를 요구하고있다

context.getActivity() 
       .sendBroadcast(
         new Intent(
           Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, 
           Uri.parse("file://" 
             + Environment 
               .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)))); 

.

전체 디렉토리 트리를 스캔하라는 것은 낭비입니다. 귀하의 경우에는 더 많은 낭비가 있습니다. 은 귀하의 파일을 해당 디렉토리에 쓰고 있지 않기 때문입니다.

root = new File(Environment.getExternalStorageDirectory() 
        + File.separator + "folder_name" + File.separator); 
root.mkdirs(); 
File sdImageMainDirectory = new File(root, "myPicName.jpg"); 

따라서, 스캔은 외부 저장 장치에 어떤 임의의 장소에 작성하는이 파일을 선택하지 않습니다 : 대신, 해당 파일을 작성.

파일을 저장할 적절한 위치를 결정한 다음 파일을 색인화해야합니다.