반응형
|
안드로이드(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 |

