2016-08-14 28 views
0

Android 6.0.1、API 23、SAF(ストレージアクセスフレームワーク)はUSBスティックをどのように認識しますか?

すべての一致するドキュメントプロバイダ(USBスティックを含む)を表示するSAFピッカーで、Android携帯に接続されたUSBスティックを表示するにはどうすればよいですか?さらに、USBポータブルストレージにファイルとフォルダを作成するためにSAFを設定する方法は? SAF-documentationから

は、私が試した:

public void performFileSearch() { 

    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 

    intent.addCategory(Intent.CATEGORY_OPENABLE); 

    // in my case, showing only text-files is enough, therefore I guess the type is as follows: 
    intent.setType("text/plain"); 

    startActivityForResult(intent, READ_REQUEST_CODE); 
} 

しかし、USBポータブル・ストレージは、ピッカーの選択肢の一部ではありません...

は、私が何をしないのですか?必要な手順を示すサンプルプロジェクトはありますか?

@CommonsWare:ここで希望のスクリーンショット:

enter image description here

+0

"私は何が欠けていますか?" - あなたは 'ACTION_OPEN_DOCUMENT' UIであなたが見ているものを示すスクリーンショットがありません。 "必要な手順を示すサンプルプロジェクトはありますか?" - [このサンプルアプリケーション](https://github.com/commonsguy/cw-omnibus/tree/master/Documents/TinyTextEditor)は、Nexus 5XでUSB-OTGドライブを使用してファイルを作成または開く際に正常に動作します。それはあなたが持っているものと同じコードを使用します。 – CommonsWare

+0

ありがとうございます - あなたのプロジェクトを見ていきます(難しい、難しい...)。今のところ、私はAndroidでSAFの世界を初めて知っているので、実際のサンプルプロジェクトはありません。私にとって最も混乱しているのは、私のアプリケーションがUSBドライブにアクセスする方法です。 SAF-DocumentProviderを提供する2番目のアプリケーションが必要ですか、それとも私のアプリケーションでも可能ですか?私が欠けているのは、私のアプリケーションが接続されているUSBドライブをどのように認識するかということです。パーミッションとSAF-メソッドに関しては、何が必要ですか? – iKK

+0

「私にとって最も混乱しているのは、私のアプリケーションがUSBドライブにアクセスする方法ですか? - あなたは 'ContentResolver'、' DocumentFile'などで使用する 'onActivityResult()'に 'Uri'を返します。" SAF-DocumentProviderを提供する2番目のアプリケーションが必要か、私のアプリケーションがそれを行うことができますか?そしてもしそうなら、正確にどのように? - それはデバイスによって提供されます。あなたのデバイスがそれをやっていない場合、あなたのデバイスメーカーまたはカスタムROMの開発者が何かをねじ込みました。もう一度、コードは正常です。このため、あなたが見ているもののスクリーンショットを投稿することをお勧めします。 – CommonsWare

答えて

1

私は問題の解決策を見つけた:SAF-クライアントAPPを持つ

は(found hereとして)開始 - 私の小さな変化を含みます内部performFileSearch()(つまり、元のDevBytesampleの代わりにintent.setType("text/plain");intent.setType("image/*");)の解は次のようになります。

「設定」(つまり、 3つの垂直ドット)を選択することができます: "内部ストレージを表示" - これはそれです!

その後、SAFのContentProviderピッカーで必要に応じてUSBスティックを接続すると表示されます(下記のスクリーンショットを参照)。

...外部接続されたUSBスティックが「内部ストレージ」として通過する理由はありませんか? (誰かがその謎に対する答えを知っていれば、私は非常に感謝します!)...とにかく、ついにUSBフラッシュが現れるのを見てうれしく思います!

enter image description here

+1

ああ、私はこれがトグルできることを忘れているので、私はそれを見ていたのです。私はSAFのこの側面が嫌いです。この場合、「内部」は基本的に「ファイルシステム」を意味します。 Googleドライブをセットアップした場合や、Dropboxやその他のさまざまなアプリがある場合は、「内部」ストレージが有効か無効かに関係なく、ピッカーにも表示されます。これを忘れることについて私の謝罪。 – CommonsWare

+0

これは申し訳ありません。とにかくscreeenshotsを主張することで、あなたは私の多くを助けました:)そしてまた、コードがうまくいっていると言います。それが助けになった!ありがとうございました。 – iKK

+0

まだSAFをサポートしていないので、Dropboxは表示されません。 Dropboxを表示させるには、 'ACTION_GET_CONTENT'というインテントを送る必要があります。 –

関連する問題