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

在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源码大家不要错过呀!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, app
二维码
java二维码生成器源码、二维码生成器源码、c 二维码生成器源代码、二维码生成器源代码、草料二维码生成器源码,以便于您获取更多的相关知识。

时间: 2024-10-31 10:34:40

月下载量上千次Android实现二维码生成器app源码分享_Android的相关文章

Android Volley框架使用源码分享_Android

过去在Android上网络通信都是使用的Xutils 因为用它可以顺道处理了图片和网络这两个方面,后来发觉Xutils里面使用的是HttpClient  而Google在6.0的版本上已经把HttpClient废除了,所以开始寻找新的网络框架,okhttp也用过,但是它是在作用在UI线程,使用起来还需要用handler 所以就先用着Volley框架了.  这里我先分析下Volley框架的简单网络请求的源码. 使用Volley请求网络数据的简单过程: RequestQueue queue = Vo

android微信支付源码分享_Android

本文为大家分享了android微信支付源码,供大家参考,具体内容如下 参数配置 public static final String APP_ID ; /** 在微信开放平台注册app,微信给分配的id **/ public static final String MCH_ID; /** 申请开通微信支付,成功后微信会给你发一封邮件,给你分配一个商户平台账号,在资料里有商户ID **/ public static final String API_KEY; /** 在微信发给你的那封邮件里,给你

实时获取股票数据的android app应用程序源码分享_Android

最近学习Android应用开发,不知道写一个什么样的程序来练练手,正好最近股票很火,就一个App来实时获取股票数据,取名为Mystock.使用开发工具Android Studio,需要从Android官网下载,下载地址:http://developer.android.com/sdk/index.html.不幸的是Android是Google公司的,任何和Google公司相关的在国内都无法直接访问,只能通过VPN访问. 下图为Android Studio打开一个工程的截图:   下面按步介绍My

Android自定义UI手势密码改进版源码下载_Android

在之前文章的铺垫下,再为大家分享一篇:Android手势密码,附源码下载,不要错过. 源码下载:http://xiazai.jb51.net/201610/yuanma/androidLock(jb51.net).rar 先看第一张图片的布局文件 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sc

Android点击事件派发机制源码分析_Android

概述  一直想写篇关于Android事件派发机制的文章,却一直没写,这两天刚好是周末,有时间了,想想写一篇吧,不然总是只停留在会用的层次上但是无法了解其内部机制.我用的是4.4源码,打开看看,挺复杂的,尤其是事件是怎么从Activity派发出来的,太费解了.了解Windows消息机制的人会发现,觉得Android的事件派发机制和Windows的消息派发机制挺像的,其实这是一种典型的消息"冒泡"机制,很多平台采用这个机制,消息最先到达最底层View,然后它先进行判断是不是它所需要的,否则

android 九宫格滑动解锁开机实例源码学习_Android

效果图由于网站占时不能上传,以后补上. NinePointLineView.java 复制代码 代码如下: package org.demo.custon_view; import org.demo.utils.MLog; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; imp

android 扫描二维码后客户端无自动跳转反应且服务端并没有收到来自客户端的请求

问题描述 android 扫描二维码后客户端无自动跳转反应且服务端并没有收到来自客户端的请求 我的代码是这样写的,我希望就是利用Scanner扫描后联网判断账户与密码的正确性,现在的情况是能够get到二维码的内容,但就是没有执行联网查询的操作,是不是不应该在OnActivityResult中去这样写呢'? 希望前辈帮忙指点指点思路.谢谢 下面是service的内容: 解决方案 问题不再这里.你service里面是怎么写的啊?在AndroidManifest.xml里面有没有注册上啊? 解决方案二

Android 二维码 生成和识别二维码 附源码下载_Android

今天讲一下目前移动领域很常用的技术--二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS.Android.WP都有相关支持的软件.之前我就想了解二维码是如何工作,最近因为工作需要使用相关技术,所以做了初步了解.今天主要是讲解如何使用ZXing库,生成和识别二维码.这篇文章实用性为主,理论性不会讲解太多,有兴趣可以自己查看源码. 1.ZXing库介绍 这里简单介绍一下ZXing库.ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口

求用电脑上用的摄像头识别二维码的源码。不要求效率。

问题描述 如题.求用电脑上用的摄像头识别二维码的源码.不要求效率,识别慢点无所谓.能生成顶个屁用,识别不出来也是个问题.一个二维码枪一千多块钱.穷人没办法,只能给穷客户找一个便宜的解决方案了. 解决方案 解决方案二:可以到沈善居上下载一个VB6写的源码,自己改改就可以了解决方案三:給我你的QQ,我發一個給你解决方案四:引用2楼的回复: 給我你的QQ,我發一個給你 哥,感谢,要VB.NET的解决方案五:穷的话干嘛要用坑爹的二维码呢?为什么不用普通的条形码?解决方案六:二维码代表着先进的技术.比条码