반응형
안드로이드(Android) 파일브라우저에서 이미지 클릭시 Exif 정보 출력하기 |
개발환경 : window 7 64bit, Eclipse Mars, Android 4.2.2 |
이전에 만든 파일브라우저와 이미지 Exif 정보보기 기능을 합쳐 하나의 프로그램으로 만들 것입니다. 파일브라우저에서 이미지를 클릭시 팝업창을 띄워 Exif 정보를 보여주는 프로그램 입니다. |
파일 브라우저에서 한 행을 클릭할 때 발생하는
이벤트에 Exif 정보를 보여주는 보여줄 것입니다.
onListItemClick() 함수가 그것인데 클릭한 행의
정보가 폴더 이면 넘어가고 폴더에서 JPG 이미지
파일이면 AlertDialog.Builder 로 텍스트를 구성해
팝업을 띄웁니다.
String exifAttribute = null; String filename = file.getName(); String ext = filename.substring(filename.lastIndexOf('.') + 1, filename.length()); if (ext.equals("JPG") || ext.equals("jpg")) { try { ExifInterface exif = new ExifInterface(file.toString()); exifAttribute = getExif(exif); } catch (IOException e) { // TODO Auto-generated catch block ; } } new AlertDialog.Builder(this) .setIcon(R.drawable.ic_launcher).setTitle("[" + filename + "]") .setMessage(exifAttribute).setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }).show();
다음은 Exif 내용을 가져오고 문자열을 구성해서 리턴해
주는 함수 입니다. getTagString() 는 한행한행에 “\n” 붙여주기
위한 함수 입니다.
private String getExif(ExifInterface exif) { String att = ""; att += getTagString(ExifInterface.TAG_DATETIME, exif); att += getTagString(ExifInterface.TAG_FLASH, exif); att += getTagString(ExifInterface.TAG_GPS_LATITUDE, exif); att += getTagString(ExifInterface.TAG_GPS_LATITUDE_REF, exif); att += getTagString(ExifInterface.TAG_GPS_LONGITUDE, exif); att += getTagString(ExifInterface.TAG_GPS_LONGITUDE_REF, exif); att += getTagString(ExifInterface.TAG_IMAGE_LENGTH, exif); att += getTagString(ExifInterface.TAG_IMAGE_WIDTH, exif); att += getTagString(ExifInterface.TAG_MAKE, exif); att += getTagString(ExifInterface.TAG_MODEL, exif); att += getTagString(ExifInterface.TAG_ORIENTATION, exif); att += getTagString(ExifInterface.TAG_WHITE_BALANCE, exif); return att; } private String getTagString(String tag, ExifInterface exif) { return (tag + " : " + exif.getAttribute(tag) + "\n"); }
메인 activity 에 전체 소스 입니다.
이전 파일 브라우저 소스와 달라진 것은
바로 위에 추가한 소스뿐입니다.
import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import android.app.AlertDialog; import android.app.ListActivity; import android.content.DialogInterface; import android.media.ExifInterface; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; public class SampleActivity26 extends ListActivity { private List<String> item = null; private List<String> path = null; private String root = "/"; private TextView mPath; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sample_activity25); mPath = (TextView) findViewById(R.id.path); getDir(root); } private void getDir(String dirPath) { mPath.setText("Location: " + dirPath); item = new ArrayList<String>(); path = new ArrayList<String>(); File f = new File(dirPath); File[] files = f.listFiles(); if (!dirPath.equals(root)) { item.add(root); path.add(root); item.add("../"); path.add(f.getParent()); } for (int i = 0; i < files.length; i++) { File file = files[i]; path.add(file.getPath()); if (file.isDirectory()) item.add(file.getName() + "/"); else item.add(file.getName()); } ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, R.layout.row, item); setListAdapter(fileList); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { File file = new File(path.get(position)); if (file.isDirectory()) { if (file.canRead()) getDir(path.get(position)); else { new AlertDialog.Builder(this).setIcon(R.drawable.ic_launcher) .setTitle("[" + file.getName() + "] folder can't be read!") .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }).show(); } } else { String exifAttribute = null; String filename = file.getName(); String ext = filename.substring(filename.lastIndexOf('.') + 1, filename.length()); if (ext.equals("JPG") || ext.equals("jpg")) { try { ExifInterface exif = new ExifInterface(file.toString()); exifAttribute = getExif(exif); } catch (IOException e) { // TODO Auto-generated catch block ; } } new AlertDialog.Builder(this) .setIcon(R.drawable.ic_launcher).setTitle("[" + filename + "]") .setMessage(exifAttribute).setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }).show(); } } /** * Exif 정보를 가져와서 문자열을 구성합니다. * @author gon * 2014. 10. 24. * @param exif * @return */ private String getExif(ExifInterface exif) { String att = ""; att += getTagString(ExifInterface.TAG_DATETIME, exif); att += getTagString(ExifInterface.TAG_FLASH, exif); att += getTagString(ExifInterface.TAG_GPS_LATITUDE, exif); att += getTagString(ExifInterface.TAG_GPS_LATITUDE_REF, exif); att += getTagString(ExifInterface.TAG_GPS_LONGITUDE, exif); att += getTagString(ExifInterface.TAG_GPS_LONGITUDE_REF, exif); att += getTagString(ExifInterface.TAG_IMAGE_LENGTH, exif); att += getTagString(ExifInterface.TAG_IMAGE_WIDTH, exif); att += getTagString(ExifInterface.TAG_MAKE, exif); att += getTagString(ExifInterface.TAG_MODEL, exif); att += getTagString(ExifInterface.TAG_ORIENTATION, exif); att += getTagString(ExifInterface.TAG_WHITE_BALANCE, exif); return att; } private String getTagString(String tag, ExifInterface exif) { return (tag + " : " + exif.getAttribute(tag) + "\n"); } }
반응형
'안드로이드 개발' 카테고리의 다른 글
안드로이드(Android) 문의 – Dialog 클래스를 이용하여 다이얼로그 계산기 올리기 (0) | 2014.11.16 |
---|---|
안드로이드(Android) 이미지뷰에서 Exif 정보 다이얼로그 띄우기 (1) | 2014.11.15 |
안드로이드(Android) showDialog(int) deprecated 다시 구현하기 (0) | 2014.11.14 |
안드로이드(Android) 파일 브라우저에서 이미지 보여주기 (1) | 2014.11.13 |
안드로이드(Android) 간단한 파일 브라우저 만들기 (0) | 2014.11.11 |
안드로이드(Android) 지니모션(GenyMotion) 에뮬레이터 파일 옮기기 (0) | 2014.11.10 |
안드로이드(Android) 사진의 EXIF 정보 가져오기 (1) | 2014.11.09 |
안드로이드(Android) XML 을 이용해 옵션메뉴를 구성하는 방법 (3) | 2014.11.09 |