[解決済み】URIから実パスを取得、Android KitKatの新ストレージアクセスフレームワーク【重複あり
2022-04-21 20:57:05
質問
で新しいギャラリーにアクセスする前 Android 4.4 (KitKat)この方法でSDカード上の実パスを取得しました。
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
startManagingCursor(cursor);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
さて、Intent.ACTION_GET_CONTENTは異なるデータを返します。
以前は
content://media/external/images/media/62
今すぐ
content://com.android.providers.media.documents/document/image:62
SDカード上の実際のパスを取得するにはどうしたらよいですか?
解決方法は?
注:この回答は問題の一部を取り上げています。完全な解決策(ライブラリーの形で)については、以下をご覧ください。 ポール・バーク氏の回答 .
このURIを利用して
document id
のどちらかに問い合わせる。
MediaStore.Images.Media.EXTERNAL_CONTENT_URI
または
MediaStore.Images.Media.INTERNAL_CONTENT_URI
(SDカードの状況により異なります)。
ドキュメントIDを取得する。
// Will return "image:x*"
String wholeID = DocumentsContract.getDocumentId(uriThatYouCurrentlyHave);
// Split at colon, use second item in the array
String id = wholeID.split(":")[1];
String[] column = { MediaStore.Images.Media.DATA };
// where id is equal to
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = getContentResolver().
query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
column, sel, new String[]{ id }, null);
String filePath = "";
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
filePath = cursor.getString(columnIndex);
}
cursor.close();
参考 この解決策が引用されている投稿を見つけることができません。元の投稿者にここに投稿をお願いしたかったのです。今夜もう少し探してみます。
関連
-
[解決済み】Edit Textのandroid:ems属性とは何ですか?[重複しています]
-
[解決済み】シンボル 'AppCompatActivity' を解決できない。
-
[解決済み】このアクティビティは、すでにウィンドウ装飾によって提供されるアクションバーを持っています。
-
[解決済み] サポートされていないメソッドです。BaseConfig.getApplicationIdSuffix()がサポートされていません。
-
[解決済み] コンパイルした.apkを端末にインストールしようとするとINSTALL_FAILED_UPDATE_INCOMPATIBLEが表示される
-
[解決済み] sendUserActionEvent() は null です。
-
[解決済み] AndroidでBluetoothが有効かどうかのチェックに失敗する(REQUEST_ENABLE_BTを変数に解決できない)。
-
[解決済み] ADBエラー:デーモンに接続できない
-
[解決済み] Pythonでパスから拡張子なしでファイル名を取得する方法は?
-
[解決済み】Android 4.4 (KitKat) の Android Gallery が Intent.ACTION_GET_CONTENT に対して異なる URI を返してしまう。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リストビューにonclicklistenerを追加する(android)
-
[解決済み】Android Studioでused import文がunused import文に指定されるのはなぜ?
-
[解決済み】sendUserActionEvent()がnullである。
-
[解決済み】フラグメントMyFragmentがアクティビティにアタッチされない。
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] Android Fragment onAttach() 非推奨
-
[解決済み] アンドロイドのギャラリーから複数の画像を選択
-
[解決済み] Androidの一部の端末で、カメラインテントで撮影した画像が回転してしまうのはなぜですか?
-
[解決済み】Android 4.4 (KitKat) の Android Gallery が Intent.ACTION_GET_CONTENT に対して異なる URI を返してしまう。
-
[解決済み] Uri.getPath()で実パスを取得する。