2013-03-13 1 views
3

버튼을 클릭하여 이미지 갤러리를 전화 갤러리에 저장하려면 onClick 이벤트를 만들려고합니다. 아래 코드는 내 코드입니다. 그것은 갤러리에 저장되지 않습니다, 왜 아무도 내가 알아낼 수 있습니까?갤러리에 imageView 이미지를 저장하는 방법 (Android 개발)

sharebtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View b) { 
      // TODO Auto-generated method stub 
      //attempt to save the image 

      b = findViewById(R.id.imageView); 
      b.setDrawingCacheEnabled(true); 
       Bitmap bitmap = b.getDrawingCache(); 
       //File file = new File("/DCIM/Camera/image.jpg"); 
       File root = Environment.getExternalStorageDirectory(); 
       File cachePath = new File(root.getAbsolutePath() + "/DCIM/Camera/image.jpg"); 
       try 
       { 
        cachePath.createNewFile(); 
        FileOutputStream ostream = new FileOutputStream(cachePath); 
        bitmap.compress(CompressFormat.JPEG, 100, ostream); 
        ostream.close(); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 

     } 
    }); 
+1

매니페스트 파일에 대한 쓰기 권한이 있습니다. – Raghunandan

답변

1

미디어 제공 업체에 이미지를 저장해야합니다. 다음은 간단한 예입니다.

Uri saveMediaEntry(String imagePath,String title,String description,long dateTaken,int orientation,Location loc) { 
ContentValues v = new ContentValues(); 
v.put(Images.Media.TITLE, title); 
v.put(Images.Media.DISPLAY_NAME, displayName); 
v.put(Images.Media.DESCRIPTION, description); 
v.put(Images.Media.DATE_ADDED, dateTaken); 
v.put(Images.Media.DATE_TAKEN, dateTaken); 
v.put(Images.Media.DATE_MODIFIED, dateTaken) ; 
v.put(Images.Media.MIME_TYPE, “image/jpeg”); 
v.put(Images.Media.ORIENTATION, orientation); 
File f = new File(imagePath) ; 
File parent = f.getParentFile() ; 
String path = parent.toString().toLowerCase() ; 
String name = parent.getName().toLowerCase() ; 
v.put(Images.ImageColumns.BUCKET_ID, path.hashCode()); 
v.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, name); 
v.put(Images.Media.SIZE,f.length()) ; 
f = null ; 
if(targ_loc != null) { 
v.put(Images.Media.LATITUDE, loc.getLatitude()); 
v.put(Images.Media.LONGITUDE, loc.getLongitude()); 
} 
v.put(“_data”,imagePath) ; 
ContentResolver c = getContentResolver() ; 
return c.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, v); 
} 
4

이미지 갤러리에 저장하려면 다음과 같이하십시오. 이미지가 정말 저장되어있는 경우

private void saveImageToGallery(){ 
    imageview.setDrawingCacheEnabled(true); 
    Bitmap b = imageview.getDrawingCache(); 
    Images.Media.insertImage(getActivity().getContentResolver(), b,title, description); 
} 

insertImage()String != null 반환합니다. 또한 : 매니페스트에서 "android.permission.WRITE_EXTERNAL_STORAGE"로 액세스 권한이 필요합니다. 그러면 갤러리에 이미있는 이미지 목록의 맨 아래에 이미지가 놓입니다.

희망이 도움이됩니다.

+1

어떤 방식 으로든 이미지 목록 상단에 표시 할 수 있습니까? –

+1

예, 저는 samkirton에서 제공 한 트릭을 사용합니다. [여기를보십시오] (https://gist.github.com/samkirton/0242ba81d7ca00b475b9). 그것은 아주 잘 작동합니다. –

-1
public static void addImageToGallery(final String filePath, final Context context) { 

    ContentValues values = new ContentValues(); 

    values.put(Images.Media.DATE_TAKEN, System.currentTimeMillis()); 
    values.put(Images.Media.MIME_TYPE, "image/jpeg"); 
    values.put(MediaStore.MediaColumns.DATA, filePath); 

    context.getContentResolver().insert(Images.Media.EXTERNAL_CONTENT_URI, values); 
} 
+0

기본적으로 다른 사람의 답변에 코드를 복사했지만 답변이 왜 효과가 있었는지 전혀 설명하지 않았습니다. –

1

이미 비트 맵을 얻을, 먼저 저장하고자하는 이미지를 유지하려면 이미지 뷰를 가정;

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

;

MediaStore.Images.Media.insertImage(getContentResolver(), yourBitmap, yourTitle , yourDescription); 

그리고 매니페스트에 권한 설정을 잊지 마세요.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
관련 문제