Kép mentése a galéria mappába

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

Nem kell megijedni, a nagy kódrész a >= Marshmallow miatt van, az onCreate-ban van a permission lekérdezés, az onRequestPermissionsResult -ban jön az engedély, majd ezután a masikCreate -ban jön az a rész, ami a Drawable mappában durr néven elmentett jpg képet bemásolja a nyilvános galéria mappába

public class MainActivity extends Activity {
    Bitmap anImage;
    @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case 1:
                boolean engedelyek = true;
                int rekLength = grantResults.length;
                if (rekLength > 0){
                    for (int rekI=0; rekI< rekLength; rekI++) if (grantResults[rekI] != PackageManager.PERMISSION_GRANTED) engedelyek= false;
                    //if (engedelyek == true)Log.i("TTAG","engedve");
                    if (engedelyek == false) Log.i("TTAG","elutasítva");
                    if (engedelyek == true) masikCreate();

                }
                break;
        }
    }
    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{
                    android.Manifest.permission.READ_EXTERNAL_STORAGE ,
                    android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        }
        if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.M)masikCreate();  //Lollipop és társai

    }
    protected void masikCreate() {
        Drawable myDrawable = getResources().getDrawable(R.drawable.durr, null);
        anImage      = ((BitmapDrawable) myDrawable).getBitmap();
        saveImageToExternalStorage(anImage);
        Toast.makeText(getApplicationContext(), "Saved successfully, Check gallery", Toast.LENGTH_SHORT).show();
    }


    private void saveImageToExternalStorage(Bitmap finalBitmap) {
        String root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
        Log.i("TTAG", "root=" + root);
        File myDir = new File(root + "");
        myDir.mkdirs();
        Random generator = new Random();
        int n = 10000;
        n = generator.nextInt(n);
        String fname = "Image-" + n + ".jpg";
        File file = new File(myDir, fname);
        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();
        }
        MediaScannerConnection.scanFile(this, new String[]{file.toString()}, null,null);
    }

}

Úgy tudom, hogy a mai android verziókban már minden applikációnak saját Pictures mappája van, amit a MediaScannerConnection (utolsó sor) -al szinkronizálunk a galéria mappába, és mikor a user a galéria mappába megy, ott valójában sok pictures mappát lát egyben anélkül hogy felfogná, vagyis most már nem lehet csak úgy ellopni mások fényképeit (azt hiszem a Lollipop óta van ez így)