問題タブ [scoped-storage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - パブリック ダウンロード フォルダーをクエリすると、MediaStore が結果を返さない (Android Q)
Xamarin を使用して Android Q (API 29) を対象とする Android プロジェクトで、sdcard のルートにある "Download" フォルダーに (apk) ファイルをダウンロードしようとしています。
まず、sdcard/Android/data/com.my.app/files にあるアプリのプライベート ストレージ スペースにファイルをダウンロードします。
次に、MediaStore API を使用して、ファイルをパブリックの "Download" フォルダーにコピーします。これは私のコードです:
MediaStore への挿入は初めて機能しますが、2 回目に挿入しようとすると、返された Uri が null になります。したがって、既存のレコードを検出できるように ContentResolver クエリを追加しましたが、このクエリは結果を返しません。別のファイル名を使用した場合にのみ、再び機能します。
デバイス ログを見ると、次のエラーが表示されます。
時間 デバイス名 タイプ PID タグ メッセージ 05-14 14:14:27.442 エラー 14571 SQLiteDatabase android.database.sqlite.SQLiteConstraintException: UNIQUE 制約が失敗しました: files._data (コード 2067 SQLITE_CONSTRAINT_UNIQUE) at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Nativeメソッド) で android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:879) で android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:790) で android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java :88) com.android.providers.media.MediaProvider.com.android.providers.media.MediaProvider.insertInternal(MediaProvider.java:3317) の insertFile(MediaProvider.java:2776) com.android.providers.media.MediaProvider.insert(MediaProvider.java:2966) の android.content .ContentProvider$Transport.insert(ContentProvider.java:309) で android.content.ContentProviderNative.onTransact(ContentProviderNative.java:154) で android.os.Binder.execTransactInternal(Binder.java:1021) で android.os.Binder. execTransact(Binder.java:994) 05-14 14:14:27.442 エラー 14571 SQLiteDatabase バケットの挿入中にエラーが発生しました_display_name=ダウンロード owner_package_name=com.my.app 親=8 ボリューム名=external_primary date_modified=1589458467 _display_name=XXX.apk mime_type=application/vnd .android.package-archive _data=/storage/emulated/0/Download/XXX.apk title=XXX.apk group_id=102105 is_download=true date_added=1589458467 primary_directory=ダウンロード bucket_id=540528482 media_type=0 relative_path=Download/
フィルターなしでメディアストア クエリを実行しても、結果カウントは 0 です。正しい Uri を取得するにはどうすればよいですか?