問題タブ [storage-access-framework]
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 - Ionic:Storage Access Frameworkを使用してGoogleドライブからファイルをアップロードする方法は?
Android および iOS プラットフォーム用の Ionic Framework を使用してハイブリッド アプリケーションを開発しています。現在、ユーザーに投稿に添付ファイルを追加してもらいたい段階で立ち往生しています。私が使用している特定のタイプの添付ファイルを追加するには:
- cordova-plugin-camera: 写真とビデオ用
- cordova-filechooser ( https://github.com/don/cordova-filechooser ): ドキュメントとファイル用
ここで、ストレージ アクセス フレームワークを使用して、ユーザーに Google ドライブ アカウントからファイル (画像、ビデオ、ドキュメントなど) を追加してもらいます。現在、FileChooser プラグインからは、自分のデバイスにあるファイルしか表示できません。どうすればこれを達成できますか?
より明確にするために、この投稿に画像を添付しています。
android - MTP を使用した Android Storage Access Framework / DocumentProvider でディレクトリ階層を通過する際の問題
更新: 私の最初の質問は誤解を招く可能性があるので、言い換えたいと思います: Android のストレージ アクセス フレームワークを介して、MTP 接続デバイスから階層ツリーをトラバースしたいです。SecurityException
サブノードは親ノードの子孫ではないというメッセージが表示されるため、これを達成できないようです。この問題を回避する方法はありますか? それとも、これは既知の問題ですか? ありがとう。
を介して Android の Storage Access Framework (SAF) を使用して、階層ツリーを介してドキュメントをトラバースしてアクセスしようとする Android アプリケーションを作成していますMtpDocumentsProvider
。アプリからSAFピッカーを起動し、MTP データ ソースを選択してからonActivityResult
、返さUri
れた階層をトラバースします。残念ながら、これは機能していないようです。サブフォルダーにアクセスしてそれをトラバースしようとするとすぐに、常に次のように表示されるためSecurityException
ですdocument xx is not a descendant of yy
私の質問は、 を使用してMtpDocumentProvider
、アプリから階層ツリーを正常にトラバースし、この例外を回避するにはどうすればよいですか?
具体的に言うと、私のアプリでは、まず次のメソッドを呼び出して SAF ピッカーを起動します。
Android SAF ピッカーが起動し、接続されたデバイスが MTP データ ソースとして認識されていることがわかります。上記のデータ ソースを選択すると、次のデータが取得Uri
されますonActivityResult
。
次に、返された を使用してUri
を呼び出しDocumentsContract.buildChildDocumentsUriUsingTree
て を取得し、Uri
これを使用してツリー階層を照会してアクセスできます。
外側の while ループの最初の繰り返しが成功query
しCursor
ました。問題は 2 回目の反復です。Uri
たまたま のサブノードであるを照会しようとrootUri
するSecurityException
と、ドキュメント xx は yy の子孫ではないというメッセージが表示されます。
D/MyApp(19241): ノード uri: content://com.android.mtp.documents/tree/2/document/2/children D/MyApp(19241): docId: 4、名前: DCIM、mime: vnd。 android.document/directory D/MyApp(19241): ノード uri: content://com.android.mtp.documents/tree/2/document/4/children E/DatabaseUtils(20944): パーセル E/DatabaseUtils への書き込み例外(20944): java.lang.SecurityException: ドキュメント 4 は 2 の子孫ではありません
私が間違っていることについて誰かが洞察を提供できますか? たとえば、外部ストレージ (つまり、標準の USB OTG リーダーを介して接続された SD カード) からのものなど、別のデータ ソース プロバイダーを使用すると、すべて正常に動作します。
追加情報: Nexus 6P、Android 7.1.1 でこれを実行しています。私のアプリminSdkVersion
は 19 です。
android - Storage Access Framework の getContentResolver().openFileDescriptor() を使用して、Dropbox/Drive/Onedrive から特定のパスにファイルをコピーするにはどうすればよいですか?
Dropbox/Drive/Onedrive などの一般的なホスティング ファイル サービスからデバイスの特定のパスにファイルをコピーしようとしています。
jpg ファイルをコピーする作業例を作成しましたが、作成したいのは、.docx、.pdf、.pptx、.jpg、.jpeg、.png、.gif、.mp3、 .mp4、.xlsx。
どうすればいいですか?コードを変更するにはどうすればよいですか?
ありがとう
編集 @CommonsWare のおかげで、次のコードを使用してファイル拡張子を取得するためのソリューションを作成しました。
編集 2 @Greenapps の助けを借りて、このソリューションを実装しました。
「一時ファイル」という名前を付ける代わりに、ファイル名を取得する方法はありますか?
編集 3
android - Android の永続化された URI のアクセス許可が、デバイスの再起動後に永続化されない
電話したにも関わらず
ドキュメント ツリー URI では、ContentResolver.PersistedUriPermissions
デバイスの再起動前に要求された URI がプロパティに含まれていても、URI はデバイスの再起動後は保持されません。ドキュメント ツリーは次のように取得されます ( Storage Access Framework persist permissions not working による):
足りないものはありますか?これは、エミュレーターとハードウェアの両方で、AOSP Lollipop にあります。
android - プログラムでファイルをSDに移動、コピーする方法は?
ユーザーがSAFを使用して内部ストレージから外部ストレージ(SDカード)にファイルを転送できるAndroidアプリを作成しています。
これは、ユーザーが SD カード ディレクトリを選択できるようにするインテントを呼び出す方法です。
そして、これは私のonActivityResultです
SDカード内のファイルをいつでも移動または削除できるように、SDカード全体の許可を取得しています。問題は、許可を取得した後でも、SDカード内のファイルを移動または削除できないことです。
Android 5.0以降の内部ストレージから外部(SDカード)にファイルを移動するにはどうすればよいですか。
編集:これは、ファイルを移動するために使用しているコードです。
qpython - startActivityForResultIntent 結果=なし
私はAndroidでqpythonを使用しており、次のことを試みています:
ピッカーで画像を選択すると、結果は次のようになります。
これから URL の結果を取得できないのはなぜですか?
前もって感謝します!
android - 追加パラメーターを使用した Android SAF openOutPutStream
従来の FileSystem API を使用すると、append パラメータを使用して出力ストリームを取得し、ファイルの末尾に書き込むことができます。
ファイルにアクセスするために使用するコードは次のとおりです。
クラシック ファイル システム API :
SAF API :
しかし、SAF API に追加パラメーターがありません。
SAF API を使用してファイルに追加するにはどうすればよいですか?
android - ACTION_OPEN_DOCUMENT_TREE は空の最近のリストを表示します
アプリケーションに SD カードへの書き込み権限を付与したいと考えています。Storage Access Framework を使用して、それらの perissions を取得しようとしています。
しかし、次のコードを使用してアクティビティを開始すると。
startActivityForResult(new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE), 42);
次の空の最近のリストが表示され、電話で内部メモリまたは SD カードを選択するオプションが他にありません (Android バージョン 5.1)。
一方、Android 5.1 を実行しているエミュレーターには SD カード メモリが表示されます。
誰が何が間違っているのか提案してもらえますか? 他のいくつかのアプリケーション (ES エクスプローラー、MP3 エディター) が私の電話で許可を求めたので、SD カードを選択することができました。