2016-07-19 16 views
0

私の問題とよく似た質問がありますが、私の問題を解決できる回答はありません。Android 6はOTGでUSBにアクセスできない

下記のAndroid 6(< 6)では、すべて正常に動作します。私はUSBディレクトリにファイルを作成できます。同じコードセットでは、Android 6では失敗します。問題は、File.canWrite()がAndroid 6のUSBディレクトリで「false」を返すことです。

ここで私が "有効" のフォルダ/ディレクトリの下に一覧表示する方法:

File rootDir = new File(Environment.getRootDirectory().toString()); 
List<File> folders = new ArrayList<>(); 
File[] files = rootDir.listFiles(); 
for (File file : files) { 
    if (isValidDirectory(file) || file.equals(mInitialRoot)) { 
     folders.add(file); 
    } 
} 

そして、これはisValidDirectory()メソッドでは、実行します。

private boolean isValidDirectory(File file) { 
    return file.isDirectory() 
      && file.canWrite() 
      && file.canRead() 
      && file.exists(); 
} 

は私がなぜが、ファイルがわかりません.canWrite()はアンドロイド6に "false"を返し、isValidDirectory()が "false"を返すようにします。

すでにandroid.permission.WRITE_EXTERNAL_STORAGEが追加されています。イオンと私はすでにそれを宣言して以来、私は問題がどこにあるかわからない...

おかげさまで、ありがとうございます。

あなたは、たとえば、このコードを使用して、その許可をユーザーに依頼する必要がAndroidのバージョン> = 6.0で
+0

「Android 6 for USBディレクトリ」にあります。そのディレクトリの正確なパスは何ですか? – greenapps

+0

'Environment.getRootDirectory()'によってどのパスが与えられていますか? /システム?その中のディレクトリをリストするにはどんな意味がありますか? – greenapps

+0

@greenapps実際にはこれは単なるテストであり、後でそれを変更する予定です。実際には、このコードは私が "ディレクトリピッカー"と呼んでいるディレクトリにあり、各ディレクトリでナビゲートすることができます。だから私が/ systemにいても、私はまだ各フォルダ/ディレクトリを選択することによって他のディレクトリに移動することができます、または "戻る"を選択して戻ることができます。私の問題は、私がcanWrite()を使用するとき、 "USBディレクトリ"は書き込み不可能なのでリストに表示されません...しかし、私が "USBディレクトリ"がリストに表示されているが、ファイルは書き込み不可能なので動作しません – SquareBox

答えて

0

これは私が方法を見つけたようです。私はStorage Access Frameworkを使用するように私のコードを移行し、これまで働いています。助けてくれてありがとう!

0

がどのようにここを見てあなたは、Android 6.0で実行時のアクセス許可を取得する必要があります

if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
       == PackageManager.PERMISSION_GRANTED) { 
     return true; 
} else { 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
     return false; 
} 
+0

アプリはmain_activityでWRITE_EXTERNAL_STORAGE権限をユーザーに既に要求しています...そして、 "App Info"画面を使用してアプリに "storage"権限が有効であることを確認できます。 – SquareBox

+0

@SquareBoxおそらく、あなたは外部ストレージにないFile.canWriteを使用します。 Androidには外部ストレージと内部ストレージがあります。外部ストレージのみを使用することができます。この記事を読む[外部SDカードの場所を探す](http:// stackoverflow。com/questions/5694933/find-an-external-sd-card-location) –

0

私の初期のランタイム許可を得るためにanswer

関連する問題