月下载量上千次Android实现二维码生成器app源码分享
程序员文章站
2023-12-15 15:26:22
在360上面上线了一个月,下载量上千余次。这里把代码都分享出来,供大家学习哈!还包括教大家如何接入广告,赚点小钱花花,喜欢的帮忙顶一个,大神见了勿喷,小学僧刚学androi...
在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源码大家不要错过呀!