2017-02-07 1 views
0

基本的には、私の質問はthisと多少似ていますが、私はそれに与えられた解決策を使用しました。問題は、ファイルが内部ストレージから来た場合にのみ動作します、であり、これはそれの原因である。このコードの一部で外部のsdからURIを使用してファイルを作成する方法は?

(私が述べた問題の溶液中):

 if (isExternalStorageDocument(uri)) { 
      final String docId = DocumentsContract.getDocumentId(uri); 
      final String[] split = docId.split(":"); 
      final String type = split[0]; 

      if ("primary".equalsIgnoreCase(type)) { 
       return Environment.getExternalStorageDirectory() + "/" + split[1]; 
      } 
      // TODO handle non-primary volumes 
     } 

次はありませんelseステートメントプライマリ以外のボリュームにアクセスする方法を検索しましたが、回答が見つかりません。

答えて

0

この質問と回答で提供されるコードはawfulです。 Uriがファイルを指す必要はありません。アクセス可能なファイルはもちろん、Uri自体から派生できるパスを持つファイルはもちろんですが、アクセスできるファイルはもちろんです。 Uricontentスキームは不透明なハンドルです。

Uriで示されるコンテンツのストリームを取得するには、ContentResolveropenInputStream()(またはopenOutputStream())を使用します。

+0

はい、私はあなたのコメントをどこかで読んだと思います。しかし、あなたが言及したopenInputStreamを試してみましょう。私はアップデートを提供します。 – hehe

関連する問題