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)