2016-08-28 4 views
2

ペイントアプリケーションを作成しようとしています。保存ボタンを除くすべてが意図したとおりに機能しています。保存ボタンをクリックするたびに保存されず、エラーが発生しますjava.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=10397, uid=10298 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()マニフェストでSecurityExceptionパーミッション - アンドロイドデバイスに画像を保存していません

else if(view.getId()==R.id.save_btn){ 
       //save drawing 
       AlertDialog.Builder saveDialog = new AlertDialog.Builder(this); 
       saveDialog.setTitle("Save drawing"); 
       saveDialog.setMessage("Save drawing to device Gallery?"); 
       saveDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener(){ 
        public void onClick(DialogInterface dialog, int which){ 
         //save drawing 
        } 
       }); 
       saveDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){ 
        public void onClick(DialogInterface dialog, int which){ 
         dialog.cancel(); 
        } 
       }); 
       saveDialog.show(); 
       drawView.setDrawingCacheEnabled(true); 
       String imgSaved = MediaStore.Images.Media.insertImage(
         getContentResolver(), drawView.getDrawingCache(), 
         UUID.randomUUID().toString()+".png", "drawing"); 

私はあなたがマニフェストFIEの記憶許可を記述する必要が

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

はあなたが何を意味するのか、あるいは全く –

+0

、あらかじめアクセス許可を求めているかどうかを確認するために多くのコードを提供しますか? – Sai

+0

https://stackoverflow.com/questions/32635704/android-permission-doesnt-work-even-if-i-have-declared-it – CommonsWare

答えて

1

あなたはちょうどこのようなあなたのコードをラップすることができます

//check permission is granted or no  
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) 
    { 
     requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, RESULT); 
    } 
    else 
    { 
    //your code 
    } 
+0

ありがとうございました! – Sai

1

を持っています。

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

また、マシュマロには、ストレージのアクセス許可を確認して許可するコードを記述する必要があります。

if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
      == PackageManager.PERMISSION_GRANTED) { 
     Log.v(TAG,"Permission is granted"); 
     return true; 
    } 

以下のコードは、許可を求める必要がある場合に使用します。

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE); 

許可の結果コールバックになります。

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
if(grantResults[0]== PackageManager.PERMISSION_GRANTED){ 
    Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]); 
    //resume tasks needing this permission 
} 

} 
+0

はい@AmmYは正しいです。Marshmallowは、いくつかの実行時アクセス許可ルールを追加しました。 –

関連する問題