欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

月下载量上千次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源码大家不要错过呀!

上一篇:

下一篇: