実現したいこと
android開発/Javaでギャラリーから写真を選択して、そのファイルのパス情報を取得したいです。
質問
ActivityResultLauncherを使用して写真の操作をしています。
private final ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == Activity.RESULT_OK) { Intent resultData = result.getData(); Uri uri = resultData.getData(); Cursor c = getContentResolver().query(uri, new String[] { MediaStore.MediaColumns.DATA }, null, null, null); c.moveToFirst(); String path = c.getString(0); c.close(); } });
・pathの値は何も表示されませんでした。
・uri.toString()は「content://com.android.providers.media.documents/document/image%3A1000000040」と表示されます。
・「new String[] { MediaStore.MediaColumns.DATA }」の所をnullにしてc.getString(2)を表示すると「IMG_2022-12-27-15-49-04-469.jpg」でした。
ここの引数の気もするのですが分かりませんでした。
このソースもしくは違うやり方でも良いので絶対パスの取得方法をご教授下さい。
追加質問
実は言うとギャラリーで選択した画像をimageViewで表示させるのは出来たのですが、そのuriをプレファレンスデータに保存して再度開いた時に保存したプレファレンスデータから画像を表示させようとしています。
しかし保存したデータから表示することが出来ませんでした。
▼ギャラリーを開いて、選択された写真のuriを取得し、imageviewに保存&プレファレンスデータに保存する処理です。
private final ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == Activity.RESULT_OK) { Intent resultData = result.getData(); if (resultData != null) { try{ Uri uri = resultData.getData(); ParcelFileDescriptor pfDescriptor = getContentResolver().openFileDescriptor(uri, "r"); if(pfDescriptor != null){ FileDescriptor fileDescriptor = pfDescriptor.getFileDescriptor(); Bitmap bmp = BitmapFactory.decodeFileDescriptor(fileDescriptor); pfDescriptor.close(); ImageView imageView = (ImageView) findViewById(R.id.page61Image); imageView.setImageBitmap(bmp); //プレファレンスデータに文字列データを登録 SharedPreferences.Editor editor = PreferencesData.edit(); editor.putString("Data61Photo", uri.toString()); editor.apply(); TextView textView62 = findViewById(R.id.page62Edit); textView62.setText(uri.toString()); //P6-2のデータをテキストに表示 } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } });
▼保存したプレファレンスデータから再度imageviewに表示させる処理(このIntentに遷移すると落ちてしまいます)
Data61Photo = PreferencesData.getString("Data61Photo", null); //データを取得 if (Data61Photo != null) { Uri uri = Uri.parse(Data61Photo); ParcelFileDescriptor pfDescriptor = getContentResolver().openFileDescriptor(uri, "r"); FileDescriptor fileDescriptor = pfDescriptor.getFileDescriptor(); Bitmap bmp = BitmapFactory.decodeFileDescriptor(fileDescriptor); pfDescriptor.close(); ImageView imageView = (ImageView) findViewById(R.id.page61Image); imageView.setImageBitmap(bmp); }
あなたの回答
tips
プレビュー