0

画像ファイルを処理するアクティビティがあります。

 if (Intent.ACTION_VIEW.equals(action) && type != null && type.startsWith("image/")) {
        Uri imageUri = i.getData();
        try {
            Bitmap image = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

これにより、ビットマップ内の画像が取得されますが、そこから exif データも取得する必要があります。を使用して画像を保存すると、image.compressこのデータが削除されます。

たとえば、gmailをクリックViewすると、使用できる実際のパスがないため、exif データを取得しようとして行き詰まります。アクティビティに渡されたデータを取得する方法byte[]、またはオブジェクトから exif データを取得する方法はありBitmapますか?

ノート:

これ:

ExifInterface exifData = new ExifInterface(imageUri.getPath());

例外は発生しませんが、すべてのタグに対して null を取得し、パスを出力しようとすると、次のようになります。

/my.email@gmail.com/messages/248/attachments/0.1/BEST/false

最初にヒットsaveしてからviewgmail にアクセスすると、上記のメソッドを使用して exif データを正常に取得しimageUri.getPath()、exif コンストラクターに渡すことができます。

動作させる方法がない場合view、ユーザーがファイルをディスクに保存した後にのみアプリケーションを使用するように求められるようにするにはどうすればよいですか? これは、私のインテント フィルターが現在どのように見えるかです。

<activity android:name=".GameActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>
4

1 に答える 1

0

次の方法でexifデータを抽出できるはずです。

ストリームまたは URI で ExifInterface を使用する方法

そこから取得: http://android-er.blogspot.co.at/2011/04/read-exif-of-jpg-file.html

//Get Real URL
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = parentActivity.managedQuery(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String realURL = cursor.getString(column_index);

//Access Exif
ExifInterface exifInterface = new ExifInterface(realURL);
String focal_length = exifInterface.getAttribute(ExifInterface.TAG_FOCAL_LENGTH);
于 2012-08-12T21:44:56.283 に答える