基本的に、私のコードでは「MotiMate」と呼ばれるギャラリーにフォルダを作成し、特定の画像ビューからそのフォルダに取り込んだ画像を保存する必要があります。また、私はAPI 23をターゲットにしているので、ストレージ権限付与メソッドを処理する必要があります。それを行う方法は?imageviewから特定のギャラリーフォルダAPIに画像を保存する23
コード:
public void downloadImageToGallery() {
File filepath = Environment.getExternalStorageDirectory();
File dir = new File(filepath.getAbsolutePath() + "/MotiMate/");
dir.mkdirs();
ImageView iv = (ImageView) findViewById(R.id.imageView);
iv.setDrawingCacheEnabled(true);
bitmap = iv.getDrawingCache();
String title = quoteType+n+".jpg";
file = new File(dir, title);
if(file.exists()) {
file.delete();
}
try {
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
isStoragePermissionGranted();
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(this, "Downloading...", Toast.LENGTH_SHORT).show();
}
public boolean isStoragePermissionGranted() {
if (Build.VERSION.SDK_INT >= 23) {
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
Log.v("", "Permission is granted");
addImageToGallery(file.getAbsolutePath(), Quote.this);
return true;
} else {
Log.v("","Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return false;
}
}
else { //permission is automatically granted on sdk<23 upon installation
Log.v("","Permission is granted");
addImageToGallery(file.getAbsolutePath(), Quote.this);
return true;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(grantResults[0]== PackageManager.PERMISSION_GRANTED) {
Log.v("","Permission: "+permissions[0]+ "was "+grantResults[0]);
//resume tasks needing this permission
}
}
public static void addImageToGallery(final String filePath, final Context context) {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.MediaColumns.DATA, filePath);
context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
しかし、私は手動で許可を処理するために必要があるでしょうか? –
は編集された答えを示します。 –