2016-11-12 7 views
0

アンドロイド6+は危険なアクセス許可が必要ですが、強制停止するまで私のコードはメモリ内にファイルを保存しないので、アプリケーションでアクセス許可を使用しています。実行時アクセス権を持つwrite_external_storageを取得する

GET許可ランタイムのための私のコード:

if(ContextCompat.checkSelfPermission(MainActivity.this, 
        android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != 
PackageManager.PERMISSION_GRANTED){ 
        ActivityCompat.requestPermissions(MainActivity.this,new String[]{ 
          Manifest.permission.WRITE_EXTERNAL_STORAGE},1); 
      }else{ 
       saveFile(); 
      } 

リスナーのユーザーからの許可または拒否のチェックのために:

public void onRequestPermissionsResult(int requestCode,String[] permission,int[] grantedResult){ 
    super.onRequestPermissionsResult(requestCode, permission, grantedResult); 
    switch(requestCode){ 
     case 1: 
      if(grantedResult.length > 0 && grantedResult[0] == PackageManager.PERMISSION_GRANTED){ 
       Log.i("TAG","Permission Granted"); 
      }else{ 
       Log.i("TAG","Permission Denied"); 
      } 
    } 
} 

とエラーlogcat:

java.io.FileNotFoundException: /storage/1B0A-390B/hamed-baradaran.mp3: open failed: EACCES (Permission denied) 

この中SAVEFILE方法:

public void saveFile(){ 
    InputStream in; 
    OutputStream out; 

    try{ 

     in = getResources().openRawResource(R.raw.hamedbaradaran); 
     out = new FileOutputStream(Environment.getExternalStorageDirectory()+"/hamed-baradaran.mp3"); 
     byte[] buffer = new byte[1024]; 
     int length; 
     while((length = in.read(buffer)) > 0) 
      out.write(buffer,0,length); 

     out.flush(); 
     out.close(); 
     in.close(); 

    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

時にアプリ起動

+0

にこのコードを試すことが何かを読んしようとしていますファイル?さらに、マニフェストに権限を追加しましたか? –

+0

いいえ私はファイルを保存したい –

+0

はい私はマニフェストへのアクセス許可を追加しました –

答えて

0

こんにちはあなたが許可要求を試すことができ、私を助けてください。 私はuが許可最初の時間を確認するとき、エラーを取得するためにそこに誤差を考えるが、二回目の画像を保存することができ、私..

+0

このメソッドは、ボタンのonClickでの実行時ランタイムとボタンをクリックしたときにアプリケーションを強制終了しないで次のクリックを許可するためにダイアログで適用するとエラーが発生しました –

+0

ohkアプリケーションがStartまたはMainActivityを起動してもsaveImageのコードを入れない場合、Permission Checkを確認してください –

+0

大丈夫ですか?saveImageを使うときは? 2回目の等力停止アプリからどういう意味ですか? –

0

それを試してみて、saveImage

public static String SaveImage(Bitmap finalBitmap) { 
    String filePath; 
    String root = Environment.getExternalStorageDirectory().toString(); 
    File myDir = new File(root + "/saved_images_camera"); 
    myDir.mkdirs(); 
    Random generator = new Random(); 
    int n = 10000; 
    n = generator.nextInt(n); 
    String fname = "Image-" + n + ".png"; 
    // filePath = "Image-" + n + ".jpg"; 

    File file = new File(myDir, fname); 
    filePath = file.getAbsolutePath(); 
    //String tmpFilePath = file.getPath().toString(); 
    IRoidAppHelper.Log("tmpFilePath", filePath); 
    if (file.exists()) file.delete(); 
    try { 
     FileOutputStream out = new FileOutputStream(file); 
     finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
     out.flush(); 
     out.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return filePath; 
} 
+0

tnx robbyしかし私のために働いていませんあなたのコードとあなたの方法を使用しますが、 –

関連する問題