首页 > 系统 > Android > 正文

月下载量上千次Android实现二维码生成器app源码分享

2020-04-11 11:09:45
字体:
来源:转载
供稿:网友

在360上面上线了一个月,下载量上千余次。这里把代码都分享出来,供大家学习哈!还包括教大家如何接入广告,赚点小钱花花,喜欢的帮忙顶一个,大神见了勿喷,小学僧刚学Android没多久。首先介绍这款应用:APP是一款二维码生成器,虽然如何制作二维码教程网上有很多,我这里再唠叨一下并把我的所有功能模块代码都分享出来。

在这里我们需要一个辅助类RGBLuminanceSource,这个类Google也提供了,我们直接粘贴过去就可以使用了

package com.njupt.liyao;import com.google.zxing.LuminanceSource; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import java.io.FileNotFoundException; public final class RGBLuminanceSource extends LuminanceSource {  private final byte[] luminances;  public RGBLuminanceSource(String path) throws FileNotFoundException { this(loadBitmap(path));} public RGBLuminanceSource(Bitmap bitmap) {  super(bitmap.getWidth(), bitmap.getHeight());  int width = bitmap.getWidth();  int height = bitmap.getHeight();  int[] pixels = new int[width * height];  bitmap.getPixels(pixels, 0, width, 0, 0, width, height);  // In order to measure pure decoding speed, we convert the entire image  // to a greyscale array  // up front, which is the same as the Y channel of the  // YUVLuminanceSource in the real app.  luminances = new byte[width * height];  for (int y = 0; y < height; y++) {  int offset = y * width;  for (int x = 0; x < width; x++) {  int pixel = pixels[offset + x];  int r = (pixel >> 16) & 0xff;  int g = (pixel >> 8) & 0xff;  int b = pixel & 0xff;  if (r == g && g == b) {  // Image is already greyscale, so pick any channel.  luminances[offset + x] = (byte) r;  } else {  // Calculate luminance cheaply, favoring green.  luminances[offset + x] = (byte) ((r + g + g + b) >> 2); }}}}@Override public byte[] getRow(int y, byte[] row) {  if (y < 0 || y >= getHeight()) {  throw new IllegalArgumentException( "Requested row is outside the image:"+ y); } int width = getWidth();  if (row == null || row.length < width) {  row = new byte[width]; } System.arraycopy(luminances, y * width, row, 0, width);  return row; } // Since this class does not support cropping, the underlying byte array  // already contains  // exactly what the caller is asking for, so give it to them without a copy. @Override public byte[] getMatrix() {  return luminances; } private static Bitmap loadBitmap(String path) throws FileNotFoundException {  Bitmap bitmap = BitmapFactory.decodeFile(path);  if (bitmap == null) {  throw new FileNotFoundException("Couldn't open"+ path); } return bitmap; }}

public Bitmap getTwoDimensionPicture(String text,int width,int height) throws WriterException{if(text.equals("")){ text="";} Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(); hints.put(EncodeHintType.CHARACTER_SET,"utf-8"); BitMatrix bitMatrix = new QRCodeWriter().encode(text,  BarcodeFormat.QR_CODE, width, height, hints); int []pixels = new int[width*height]; for(int y=0;y<height;y++){ for(int x=0;x<width;x++){ if (bitMatrix.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;}
public void createDirctoryToSaveImage(){ String dirPath=Environment.getExternalStorageDirectory()+File.separator+"TowDimensionCode"; File dirFile=new File(dirPath);if(!dirFile.exists()){dirFile.mkdir();}}public void writeBitMapToSDCard(Bitmap bitmap) throws IOException{ String fname = DateFormat.format("yyyyMMddhhmmss", new Date()).toString()+".jpg"; String filePath=Environment.getExternalStorageDirectory()+File.separator+"TowDimensionCode"+File.separator+fname; File file=new File(filePath); FileOutputStream fileOutputStream=new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);fileOutputStream.flush();fileOutputStream.close();//把图片加入到系统图库里面MediaStore.Images.Media.insertImage(getApplicationContext().getContentResolver(), file.getAbsolutePath(), fname, null);//uri得到的是文件的绝对路径 getApplicationContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse("file://"+file.getAbsolutePath())));edtText.setText(file.getAbsolutePath()); Toast.makeText(this,"生成成功", Toast.LENGTH_LONG).show();}

//打开相册 private void setImage() {//使用intent调用系统提供的相册功能,使用startActivityForResult是为了获取用户选择的图片 Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT);getAlbum.setType(IMAGE_TYPE); startActivityForResult(getAlbum, IMAGE_CODE);}@Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ if (resultCode != RESULT_OK) { //此处的 RESULT_OK 是系统自定义得一个常量 Log.e("TAG->onresult","ActivityResult resultCode error");return;} Bitmap bm = null; //外界的程序访问ContentProvider所提供数据 可以通过ContentResolver接口 ContentResolver resolver = getContentResolver();//此处的用于判断接收的Activity是不是你想要的那个 if (requestCode == IMAGE_CODE) { try { Uri originalUri = data.getData(); //获得图片的uri  bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); //显得到bitmap图片imgView.setImageBitmap(bm);//这里开始的第二部分,获取图片的路径: String[] proj = {MediaColumns.DATA};//好像是android多媒体数据库的封装接口,具体的看Android文档 Cursor cursor = managedQuery(originalUri, proj, null, null, null);  //按我个人理解 这个是获得用户选择的图片的索引值 int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA); //将光标移至开头 ,这个很重要,不小心很容易引起越界cursor.moveToFirst();//最后根据索引值获取图片路径 String path = cursor.getString(column_index);edtText.setText(path);btnOpen.setText(R.string.recognitionTwoCode); }catch (IOException e) {Log.e("TAG-->Error",e.toString());}}}
/** * 解析二维码图片里的内容 * @param filePath 二维码图片的位置 * @throws IOException * @throws NotFoundException*/ private String readImage(ImageView imageView) {  String content = null;  Map<DecodeHintType, String> hints = new HashMap<DecodeHintType, String>();  hints.put(DecodeHintType.CHARACTER_SET,"utf-8");  // 获得待解析的图片  Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();  RGBLuminanceSource source = new RGBLuminanceSource(bitmap);  BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));  QRCodeReader reader = new QRCodeReader();  try {  Result result = reader.decode(bitmap1, hints);  // 得到解析后的文字  content = result.getText();  } catch (Exception e) { e.printStackTrace();} return content; }
//ad布局部分 private RelativeLayout adContainer = null; private IMvBannerAd bannerad = null;final String adSpaceid ="这是你申请的广告ID号";adContainer=(RelativeLayout)findViewById(R.id.adcontent); bannerad = Mvad.showBanner(adContainer, this, adSpaceid, false);bannerad.showAds(this);

月下载量上千次Android实现二维码生成器app源码大家不要错过呀!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表