第一步:集成zxing库
//集成二维码
api 'com.google.zxing:core:3.3.3'
//添加读写权限
第二步:uir转bitmap
/** * Created by KeithXiaoY on 2016/7/27. * 生成一个二维码图像 * * @param url * 传入的字符串,通常是一个URL * @param widthAndHeight * 图像的宽高 * @return */ private final int BLACK = 0xff000000; private final int WHITE = 0xffffffff; public Bitmap createQRCode(String str, int widthAndHeight) throws WriterException { Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); BitMatrix matrix = new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, widthAndHeight, widthAndHeight); int width = matrix.getWidth(); int height = matrix.getHeight(); int[] pixels = new int[width * height]; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if (matrix.get(x, y)) { pixels[y * width + x] = BLACK; } else { pixels[y * width + x] = WHITE; } } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; }
第三步:保存到本地
方法1:调系统的
MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "shareImage", "description");
方法2:
/** * API29 中的最新保存图片到相册的方法 */ public boolean saveBitmap(Bitmap toBitmap, Context context) { boolean state = false; //开始一个新的进程执行保存图片的操作 Uri insertUri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues()); //使用use可以自动关闭流 try { OutputStream outputStream = context.getContentResolver().openOutputStream(insertUri, "rw"); if (toBitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream)) { state = true; } else { state = false; } } catch (FileNotFoundException e) { e.printStackTrace(); } return state; } 方法3: public static void saveImageToGallery(Context context, Bitmap bmp) { // 首先保存图片 File appDir = new File(Environment.getExternalStorageDirectory(), "Boohee"); 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(); } 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.parse("file://" + file.getAbsolutePath()))); }