儲存圖片到指定資料夾,即時更新相簿
阿新 • • 發佈:2019-02-02
本篇要實現的是點選一個按鈕,彈出一個自定義dialog,上面放有一張圖片,點選儲存後,該圖片將被儲存到指定的資料夾中。
主介面的佈局就放一個button即可。
先來看dialog的程式碼
private void dialog(){ //先new出一個監聽器,設定好監聽 DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { switch(which){ case Dialog.BUTTON_POSITIVE: Toast.makeText(MainActivity.this, "確認").show(); Bitmap rawBitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.a); saveImageToGallery(MainActivity.this,rawBitmap); break; case Dialog.BUTTON_NEGATIVE: Toast.makeText(MainActivity.this, "取消").show(); break; } } }; //dialog引數設定 final ImageView img = new ImageView(this); img.setImageResource(R.mipmap.a); AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到構造器 builder.setTitle(" "); //設定標題 builder.setView(img); // builder.setMessage("是否確認退出?"); //設定內容 // builder.setIcon(R.mipmap.ic_launcher);//設定圖示,圖片id即可 builder.setPositiveButton("儲存",dialogOnclicListener); builder.setNegativeButton("取消", dialogOnclicListener); builder.create().show(); }
上面這段程式碼直接呼叫即可
saveImageToGallery(Context context,Bitmap bitmap)就用來儲存圖片,注意這裡的圖片一定要是bitmap格式。
public static void saveImageToGallery(Context context, Bitmap bmp) { // 首先儲存圖片 File appDir = new File(Environment.getExternalStorageDirectory(), "test"); if (!appDir.exists()) { appDir.mkdir(); } String fileName = System.currentTimeMillis() + ".jpg"; File file = new File(appDir, fileName); try { FileOutputStream fos = new FileOutputStream(file); bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); Toast.makeText(context,"檔案已儲存到"+Environment.getExternalStorageDirectory()+"/test",Toast.LENGTH_SHORT).show(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 其次把檔案插入到系統圖庫 // try { // MediaStore.Images.Media.insertImage(context.getContentResolver(), // file.getAbsolutePath(), fileName, null); // } catch (FileNotFoundException e) { // e.printStackTrace(); // } // 最後通知相簿更新 context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file))); }
上段程式碼中被註釋的部分,經檢驗,圖片會被單獨放在命名為picture的資料夾裡面,所以這裡不需要,可以註釋掉。
注意注意!!還要加上許可權!!
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
所有的步驟就是這樣,只需要一個方法即可
效果圖如下