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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

1回答

194閲覧

標準ギャラリーから取得した画像のパスをuriで取得したい

tenshoku_junbi

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2024/10/20 06:42

編集2024/10/21 22:15

作成したのが以下コードですが、疑問があります。
想定動作環境:Android 14

https://qiita.com/kurei/items/ac0952e57fa026ee51a8 
のコードをコピー&ペーストしています)
・columns の MediaStore.Images.Media.DATA はデータの種類だと思いますが、画像のパスを取得する場合この部分にはどんな文字を入力すればいいのでしょうか。
またその文字の調べ方を教えてください。
・「uriは自動的に区分され各(データベース内の)列に振り分けられ、query関数でデータを抽出される」という考え方はあっていますか。
・cannot resolve contextと出ますが、解決方法がわかりません。

知識不足のところがありますがよろしくお願いします。

Java

1 ActivityResultCallback<Uri>() { 2 public void onActivityResult(Uri uri) { 3....--- 4 5/** 6 * UriからPathへの変換処理 7 * @param uri 8 * @return String 9 */ 10public static String getPath(Context context, Uri uri) { 11 ContentResolver contentResolver = context.getContentResolver(); 12 String[] columns = { MediaStore.Images.Media.DATA }; 13 Cursor cursor = contentResolver.query(uri, columns, null, null, null); 14 cursor.moveToFirst(); 15 String path = cursor.getString(0); 16 cursor.close(); 17 return path; 18} 19... 20} 21

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

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

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

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

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

jimbe

2024/10/20 15:42 編集

タイトルには、分からない点を端的に示す文を書いてください。現状ではタイトルから内容が読み取れないと思います。 コードのご提示には、コードのマークダウンをご利用ください。 また、メディア系は android OS のバージョン等によって扱えるデータが異なります。 開発の環境/動作対象の環境等の情報の追加をお願い致します。
tenshoku_junbi

2024/10/21 22:16

ご指摘の通り修正しました。ありがとうございます。
tenshoku_junbi

2024/10/21 22:20

回答頂いて恐縮ですが理解のため少し時間頂きます。
jimbe

2024/10/22 03:12

修正ありがとうございます。 ContentResolver の動作は対となる ContentProvider と関係しますので、 ContentProvider についてもお調べになると良いかもしれません。(Uri 周りの話も当然出てきますので。)
tenshoku_junbi

2024/10/22 08:35

分かりました。 ありがとうございます。
guest

回答1

0

MediaStore.Images.Media.DATA

は、MediaStore.Images.Media クラスが implements している MediaStore.Images.ImageColumns インターフェース → MediaStore.MediaColumns インターフェース で定義されています。

https://developer.android.com/reference/android/provider/MediaStore.MediaColumns#DATA

Added in API level 1
Deprecated in API level 36

API レベル 1 で追加
API レベル 36 で非推奨

Absolute filesystem path to the media item on disk.

ディスク上のメディア アイテムへの絶対ファイル システム パス。

Apps may use this path to do file operations. >However, they should not assume that the file is always available. Apps must be prepared to handle any file-based I/O errors that could occur.

アプリはこのパスを使用してファイル操作を行うことができます。ただし、ファイルが常に使用可能であると想定しないでください。アプリは、発生する可能性のあるファイルベースの I/O エラーを処理できるように準備する必要があります。

From Android 11 onwards, this column is read-only for apps that target R and higher. On those devices, when creating or updating a uri, this column's value is not accepted. Instead, to update the filesystem location of a file, use the values of the DISPLAY_NAME and RELATIVE_PATH columns.

Android 11 以降では、R 以降をターゲットとするアプリではこの列は読み取り専用です。これらのデバイスでは、URI を作成または更新するときに、この列の値は受け入れられません。代わりに、ファイルのファイルシステムの場所を更新するには、DISPLAY_NAME 列と RELATIVE_PATH 列の値を使用します。

Though direct file operations are supported, ContentResolver#openFileDescriptor(Uri, String) API is recommended for better performance.
This constant represents a column name that can be used with a ContentProvider through a ContentValues or Cursor object. The values stored in this column are Cursor#FIELD_TYPE_STRING .

直接的なファイル操作はサポートされていますが、パフォーマンスを向上させるには ContentResolver#openFileDescriptor(Uri, String) API を使用することをお勧めします。
この定数は、ContentValues または Cursor オブジェクトを介して ContentProvider で使用できる列名を表します。この列に格納される値は Cursor#FIELD_TYPE_STRING です。

投稿2024/10/21 15:06

jimbe

総合スコア13108

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問