Please Enable JavaScript!
Gon[ Enable JavaScript ]

안드로이드(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) 파일브라우저에서 이미지 클릭시 Exif 정보 출력하기

 

Posted by 녹두장군

댓글을 달아 주세요