問題タブ [android-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.

0 投票する
0 に答える
412 参照

android - FileProvider は provider_path.xml でプロバイダー パスをどのように選択/区別しますか?

apk をインストールするには、FileProvider を使用する必要があります。すべてが正常に機能するようになりましたが、 fileProvider がprovider_paths.xml内で定義された正しいパスを選択するために従う動作がよくわかりません。これが私のコードです:

マニフェスト.xml

main_activity.java

provider_paths.xml

FileProvider がexternal_pathまたはfiles_path (またはファイルで定義されているもの) のどちらを選択するかは、何に依存しますか?

0 投票する
3 に答える
3148 参照

android - 公開ダウンロード ファイル onActivityResult へのアクセス Android 28 Samsung Galaxy S9+ (Verizon)


アップデート

8.0.0 T-Mobile を実行している Samsung Galaxy S8+ を持っていますが、8.0.0 を実行しても問題なく動作します。

8.0.0 Verizon を実行している私の Samsung Galaxy S9+ は、不正な引数で毎回失敗します。

8.0.0 T-Mobile を実行している Samsung Galaxy S9+ には問題がなく、正常に動作します

したがって、これは OEM 固有のモデルの問題である可能性がありますが、まだ修正方法がわかりません。電話の再起動も試みましたが、結果は変わりませんでした。

また、Evernote 内から公開ダウンロードを開き、ファイルを添付ファイルとしてノートに保存しました。これは、Evernote が公開ディレクトリに問題なくアクセスしてファイルを添付できることを示しているため、デバイス上で実行できます。それがコード関連であると私に信じさせます。


そのため、最近、正常に機能していたプロジェクトをアップグレードしましたが、最新バージョンの Android 用にビルド ツール 28 でコンパイルしているため、バグが発生しています。

したがって、私は常にこの PathUtil を使用して、ユーザーからファイルを選択するという暗黙の意図から必要なファイル パスを取得してきました。以下に、私が長い間使用しているコードへのリンクを共有します。

PathUtil

これは、プロバイダーの権限をチェックし、読み取ろうとしているファイルの絶対パスを取得する単なるユーティリティ クラスです。

ユーザーがパブリック ダウンロード ディレクトリからファイルを選択すると、onActivityResultに次のように返されます。

これで、nice ユーティリティがこれを解析し、これがダウンロード ディレクトリ ファイルであり、ID が 2025 のドキュメントであることを教えてくれます。

次は、コンテンツ リゾルバーを使用してファイルの絶対パスを見つけます。これは以前は機能していましたが、機能しなくなりました:(。

現在、パス ユーティリティは、コア ライブラリ自体から取得した可能性が最も高いコントラクト データを使用するだけです。静的文字列を避けるためにプロバイダー クラスをインポートしようとしましたが、利用できないようです。そのため、一致する文字列を使用するのが今のところ最善の方法だと思います。

コンテンツ リゾルバーにすべてのアクセスを提供するコア DownloadProvider を参照用に示します。 ダウンロードプロバイダー

注* この DownloadProvider は Android であり、私のものではありません

contentProvider の Uri を構築するコードは次のとおりです。

呼び出し参照:

基本的に解決される contentUri は

content://downloads/public_downloads/2025

次に、クエリ メソッドを呼び出すと、次のメッセージがスローされます。

java.lang.IllegalArgumentException: 不明な URI: content://downloads/public_downloads/2025

確認・試したこと

  1. 外部アクセス許可の読み取り (書き込みが付属していますが、とにかく実行しました)
  2. 外部権限の書き込み
  3. 権限はマニフェストにあり、実行時に取得されます
  4. 複数の異なるファイルを選択して、1 つがおかしいかどうかを確認しました
  5. アプリケーション設定で権限が付与されていることを確認しました
  6. Uri を /1 または最後に /#2052 にハードコーディングして、さまざまなエンディング タイプを試しました。
  7. コア ライブラリの uriMatching を調査して、フォーマットがどのように期待されるかを調べ、一致することを確認しました
  8. 私は uri の all_downloads ディレクトリをいじってみましたが、解決しました!! しかし、セキュリティ例外があるため、リゾルバーが存在する必要があります。

他に何を試すべきかわかりません。助けていただければ幸いです。

0 投票する
1 に答える
1309 参照

java - AndroidでSdCardのルートに新しいフォルダを作成するには?

SdCard のルートまたはメイン ページに新しいフォルダを作成したいと考えています。このメソッドを使用して、SdCard の場所を取得しました。

ただし、この方法は一部のデバイスでは機能しませんでした。すべてのデバイスで動作し、SdCard の場所を取得する方法が必要です。

私も試しました:

しかし、この方法はデバイスのストレージを対象としています。でもSdCardが欲しい。