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) { } } }
0 件のコメント:
コメントを投稿