質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
exif

Exifは、デジタルカメラで撮影した画像データに、撮影時の状況などさまざまな情報(メタデータ)を添付して保存する画像ファイル形式の規格です。この付加情報により、データ管理や機器同士のデータ交換、最適な設定の出力などを行うことができます。

Q&A

0回答

550閲覧

ExifInterfaceでnullが返される

ken_matsu

総合スコア0

exif

Exifは、デジタルカメラで撮影した画像データに、撮影時の状況などさまざまな情報(メタデータ)を添付して保存する画像ファイル形式の規格です。この付加情報により、データ管理や機器同士のデータ交換、最適な設定の出力などを行うことができます。

0グッド

0クリップ

投稿2022/05/17 05:28

指定したディレクトリのjpegファイルのファイル名と撮影年月日の一覧をListViewで表示するandroidアプリ(android studio Bumblebee、 javaで)を作っています。

Activity Result API、ストレージアクセスフレームワークを利用してファイル名は取得できるのですが、ExifInterface での撮影年月日が取得できません。タグが見当たらないという意味か null が返されます。

jpegファイルのExifに撮影年月日(TAG_DATETIME_ORIGINAL)が存在しているのは確認しています。
inputStream が null かと思い確認したところ notNull でした。

私のコードのどこに問題があるのかご指摘いただければと思います。
ご助言よろしくお願いいたします。

java

1public class SortFragment extends Fragment { 2 3 private FragmentSortBinding binding; 4 static List<String> dataList = new ArrayList<String>(); 5 static ArrayAdapter<String> adapter; 6 7 final Context context = getContext(); 8 9 ActivityResultLauncher<Intent> getFolderLauncher = registerForActivityResult( 10 new ActivityResultContracts.StartActivityForResult(), 11 new ActivityResultCallback<ActivityResult>() { 12 @Override 13 public void onActivityResult(ActivityResult result) { 14 // 結果を取得した時の処理を定義 15 if (result.getResultCode() == RESULT_OK) { 16 Intent data = result.getData(); 17 Uri uri = data.getData(); // 選択ディレクトリuri 18 19 // ファイルアクセスのためのオブジェクトを取得する 20 DocumentFile documentFile = DocumentFile.fromTreeUri(context, uri); 21 final @NonNull DocumentFile[] listFiles = documentFile.listFiles(); 22 23 String fileName = "", exifData = ""; 24 25 dataList.clear(); 26 27 for (DocumentFile file : listFiles) { 28 if (file.isDirectory()) { 29 } else if (file.getType().equals("image/jpeg")) { 30 fileName = file.getName(); 31 Uri childUri = file.getUri(); 32 String exifDateTime = ""; 33 if (childUri != null) { 34 try (InputStream inputStream = context.getContentResolver().openInputStream(childUri)) { 35 ExifInterface exif = new ExifInterface(inputStream); 36 exifDateTime = exif.getAttribute(ExifInterface.TAG_DATETIME_ORIGINAL); 37 } catch (IOException e) { 38 e.printStackTrace(); 39 } 40 } 41 dataList.add(fileName + " " + exifDateTime); 42 } 43 } 44 } 45 } 46 } 47 ); 48 49 public View onCreateView(@NonNull LayoutInflater inflater, 50 ViewGroup container, Bundle savedInstanceState) { 51 binding = FragmentSortBinding.inflate(getLayoutInflater()); 52 View root = binding.getRoot(); 53 54 // btnFolderにリスナー登録 55 Button btnFolder = binding.btnFolder; 56 btnFolder.setOnClickListener(new View.OnClickListener() { 57 @Override 58 public void onClick(View v) { 59 openFolder(); 60 } 61 }); 62 63 // リスト項目とListViewを対応付けるArrayAdapterを用意する 64 adapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, dataList); 65 // ListViewにArrayAdapterを設定する 66 ListView listView = binding.listView; 67 listView.setAdapter(adapter); 68 69 return root; 70 } 71 72 // フォルダ選択(SAF) 73 private void openFolder() { 74 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); 75 getFolderLauncher.launch(intent); 76 } 77 78 @Override 79 public void onDestroyView() { 80 super.onDestroyView(); 81 binding = null; 82 } 83}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ken_matsu

2022/05/21 03:47

質問の内容に誤りがありました。 「jpegファイルのExifに撮影年月日(TAG_DATETIME_ORIGINAL)が存在しているのは確認しています」としていますが、撮影年月日の無いjpegファイルもありました。 確認のとれた撮影年月日のあるjpegファイルでコードを実行したところ、問題なく取得できました。 質問を取り下げさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問