2016-07-05 12 views
2

私はにあります。Marshmallow(api 23)ディレクトリ "/ storage/emulated"にアクセスする方法

および私は相対的なアクセス許可を宣言し、これらのアクセス許可を実行時に要求しています。external storage directory - "/ storage/emulated/0"からEnvironment.getExternalStorageDirectory()までです。このファイルインスタンス(ここではextFと呼ぶ)を使用すると、extF.listFiles()はnullではありません。しかし、extF.getParentFile().listFiles()はnullを返します。 adbのシェルで

は、私が"/storage/emulated"ディレクトリをチェックしていると2つのつの子ディレクトリが持っていた:だから

0

obb

を、なぜ私は"/storage/emulated"上の子ファイルを取得することはできませんMarshmallow(api23)File.listFiles()?ご説明をいただき、ありがとうございます。

+0

にこの権限を追加し、この

// Declare this function to check for runtime permission private boolean checkandRequestPermission(){ int storageread = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE); List<String> listpermissionNeeded = new ArrayList<>(); if (storageread != PackageManager.PERMISSION_GRANTED) { listpermissionNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE); } if (!listpermissionNeeded.isEmpty()) { ActivityCompat.requestPermissions(this, listpermissionNeeded.toArray(new String[listpermissionNeeded.size()]),REQUEST_ID_MULTIPLE_PERMISSIONS); return false; } return true; } 

のような実行時の権限を追加する必要がありますか? –

+0

@GyanendraMani MarshMallowでは、api 23. –

+0

あなたのアプリには読み取り権限があり、apiでは実行時に権限を確認する必要があります。 –

答えて

0

なぜ、これらのファイルをFile.listFiles()で取得できないのですか?

あなたのアプリにはそのディレクトリへの読み取りアクセス権がありません。 アンドロイド:

+0

ディレクトリへの読み取りアクセス権を取得するにはどうすればよいですか? –

+0

@lmz:ルートデバイスでは、おそらく 'su' /' sudo'を使ったアプローチがあります。または、このディレクトリを世界閲覧可能にする独自のカスタムROMを作成し、そのカスタムROMをデバイスにインストールすることもできます。それ以外の場合は、読み取りアクセス権がありません。 – CommonsWare

0

はマニフェストでアクセス権に問題がある可能性がありますが、パスが正しいかどうかだけを確認してください作品ではない、そのない場合は名前=「android.permission.READ_EXTERNAL_STORAGE」*

コードの下

です私のために働いて

File f = new File(Environment.getExternalStorageDirectory()+ ""); 
     if (f.exists()) { 
     File[] dff= f.listFiles(); 
     }else{ 
      Logs.debug("siz","Files not existed."); 
     } 
1

あなたはこの

//this function will check for runtime permission so Add this block in your OnCreate() Method 

    if(checkandRequestPermission()) { 

     File sdCardRoot = Environment.getExternalStorageDirectory(); 
       Log.w("SDCardRoot", "" + sdCardRoot); 
       File yourDir = new File(sdCardRoot, "/yourFolderName"); 

       // This will check if directory is exist or not 
       if (!yourDir.exists()) { 
        yourDir.mkdirs(); 
       } 

       if(yourDir.isDirectory()){ 

        File[] content = yourDir.listFiles(); 
        for(int i = 0; i<content.length;i++){ 

         // Your List of Files 
         Log.w("List", "" + String.valueOf(content[i])); 

        } 
    } 
ようマシュマロ内のファイルのリストを取得することができます

あなたはAPIレベル23を使用している場合、今あなたがテストしているAPIレベルであなたのManifiest

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
+0

私はすでにそれらをしています。 –

+0

私のアンドロイドスタジオでは、このコードは完全に機能します。指定されたフォルダからすべてのリストファイルにアクセスします。子フォルダにアクセスしたい場合は、そのディレクトリの完璧なパスを指定する必要があります。 – pike

+0

あなたの 'sdCardRoot'ファイルの'親ファイル 'を取得し、 '子ファイル' sdCardRoot'。 –

関連する問題