2016-09-01 9 views
0

AndroidのMarshmallow 6.0.1の外部SDカードからファイルを読み込もうとしていますが、バイトで変換したいのですが、fileNotFoundException 。しかし私の同じコードは6.0とそれ以下で動作しています。私のコードは次の通りです:fileNotFoundExceptionを開いている外部SDカードからファイルを読み取ることができませんでした:ENOENT android Marshmallow 6.0.1

private String convertFileToByteArray(File file) { //file path as: /storage/emulated/0/abc.doc 
     byte[] byteArray = null; 
     try { 

      File f=new File(file.toString()); 
      Log.e("File EXISTs: >>",""+f.exists()); 

      //getting error in this line,giving fileNotFoundException 
      FileInputStream inputStream = new FileInputStream(file); 
      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      byte[] b = new byte[1024 * 11]; 
      int bytesRead = 0; 

      while ((bytesRead = inputStream.read(b)) != -1) { 
       bos.write(b, 0, bytesRead); 
      } 

      byteArray = bos.toByteArray(); 

      Log.e("Byte array", ">" + byteArray); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return Base64.encodeToString(byteArray, Base64.NO_WRAP); 
    } 

私はここで何をしているのですか? PS:実行時のアクセス権も与えています。

+0

あなたは6. –

答えて

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

使用許可

マシュマロの使用においてdocumentation

+0

の許可コードでアプリケーションから許可を得なければなりません。私はすでにそれを行いました。 –

1

てtryブロック内の外部記憶装置のためにこのコードを行ってください。

public boolean isexternalStoragePermissionGranted() { 
if (Build.VERSION.SDK_INT >= 23) { 
    if (android.Manifest.permission.WRITE_EXTERNAL_STORAGE == PackageManager.PERMISSION_GRANTED) { 
     Log.v(TAG,"Permission is granted"); 
     return true; 
    } else { 

     Log.v(TAG,"Permission is revoked"); 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
     return false; 
    } 
} 
else { //permission is automatically granted on sdk<23 upon installation 
    Log.v(TAG,"Permission is granted"); 
    return true; 
} 

} 
+0

では、set targetSdkVersionを実行時権限を要求せずに22とすることはできません。いいえの場合は説明してください。 –

+0

Amit blow SDKVersion22以下のsdkは確認の許可をしたくない – Hemina

関連する問題