GralleryにIntentを投げて選択した画像が過去に選択したものかを判断するためにMD5値を計算してそれを比べることにした。
まず、GralleryにIntentを投げる。
@Override
protected void onStart() {
super.onStart();
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, 100);
}
onActivityResultにて帰ってきたIntentからMD5値を計算する。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 100 && resultCode == RESULT_OK) {
try {
ContentResolver contentResolver = getContentResolver();
// Intentより画像ファイルのパスを取得する
String[] columns = { ImageColumns.DATA };
Cursor cursor = contentResolver.query(data.getData(), columns, null, null, null);
if(cursor==null) return;
cursor.moveToFirst();
String path = cursor.getString(cursor.getColumnIndex(ImageColumns.DATA));
// ファイルを読んでMD5値を計算する
FileInputStream fis = new FileInputStream(path);
MessageDigest md = MessageDigest.getInstance("MD5");
DigestInputStream dis = new DigestInputStream(fis, md);
byte [] buffer = new byte[1024];
while(dis.read(buffer) == 1024) { }
byte[] digest = md.digest();
StringBuilder md5 = new StringBuilder();
for (int i = 0;i < digest.length;i++) {
md5.append(Integer.toHexString(digest[i] >> 4 & 0xf));
md5.append(Integer.toHexString(digest[i]& 0xf));
}
Log.v(TAG, md5.toString());
fis.close();
cursor.close();
} catch (Exception e) {
}
}
}