`
android_mini
  • 浏览: 18892 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

分享开发 Android 手机应用的开发经验——QR生成器

阅读更多

   
        声明一下:本次活动是谷歌举办的,要求是在校大学生。我今年本科毕业,但是继续上研了,目前好像处于无人管阶段,即不属于人事部也不属于教育部,不知道我有没有资格参加这个活动 。好了,闲话少说,有没有资格暂且不管,先把博文写好吧。
        本文讲述的是我从接触android到开发出第一款软件的过程,期间也有很多毕业前的烦事所扰,断断续续大概用了一个多月的时间吧,算是搞出了第一个像样点的app。当然,我这边文章讲述的android开发经验肯定是入门级别的,希望大牛们看了不要笑话\(^o^)/~。
        话说接触android开发,算是机缘巧合。今年4月份中旬左右,那时的我还在为自己本科的毕设迷茫和忙碌。在实验室窝了一天,去吃饭时候刚好遇到班上一哥们,说要去听一个“XX公司”举办的android比赛的报告会,就跟着去了。本来是去凑热闹的,没想到听后觉得这个挺有意思,刚好自己有一款传说能装android系统的M8,就尝试着学学吧。自己摸索了十几天,有点感觉了,就准备着做二维码生成器和扫描仪了。顶着毕设的压力,最后竟然把这个二维码做出来了,还获得了这个公司比赛的奖品,现在暑假还来到了这个公司实习,继续android方面的开发,实在是幸运。
        关于Android平台我就不介绍了,相信大家也都略知一二,只要知道它是开源的,现在有很多手机用,以后也会有很多手机用就OK了。下面我就把我是怎么从对Android一无所知到开发出第一款软件的过程分析给大家看看,算是抛砖引玉了哈。


         一:查资料。


         说干就干。在这之前,对Android只是听过名字而已,“开放手机联盟”根本没听说过。上网查了下Android方面的资料,不看不知道,一看吓一跳,铺天盖地的介绍,真是火的不得了,这才发现计算机科班出身的我是多么的落后。
         不怕慢,只怕停。我接受新知识的能力总是很慢,说得好听点是慢工出细活,其实就是脑子迟钝,O(∩_∩)O~,见笑。但是我相信一句话:不怕慢,就怕停。这么多年过来了,就是靠着这句话才算混到现在。Android方面的资料多有好处也有坏处。好处就是资料多了,你想看哪个看哪个,想看什么有什么,坏处却是资料太多,不知道看哪个好。特别对于新手,没有鉴别能力,今天看这本书,明天看那本书,结果书换了好几本,知识掌握的寥寥无几。
         所以我做的第一件事就是甄选资料。去eoe,安卓网等论坛逛逛,把介绍差不多的电子书,例子什么的都先下载下来,然后一个个先快速浏览一下,最后确定看哪本书。我当时资料下载了很多,光电子书就有六七本,英文的也有好几本,最后我选择《深入浅出AndroidGoogle》作为入门书籍。原因有二:1这本电子书的整体色彩不错,采用淡绿色作为背景,看着挺舒服。2这点是最重要的一点,我甄别是否适合入门书的标准就是看书中介绍第一个工程的方法,是不是能让初学者一看就懂。这本书这点就做得很好,比如他讲解Android预设程序架构的结构时,一步步,先分析资源中的XML文件,并且对XML文件的结构做了详细介绍,初学者一看就明白了Android程序的MVC框架,也知道了Android程序的档案结构。基于这两点,我选择这本书作为入门书。
          

          资料选择好了,剩下的就是好好看了。那个时候自己真是疯了,毕设做的一塌糊涂,竟然天天在Eclipse下调试Android程序。用了大概十天时间,把这本书啃完了。看书的过程就不用多说了,无非是把书中的代码自己调试调试,增加印象。这本书的作者很细心,给出的代码基本没错误,照着调肯定都对。回头总结一下,感觉Android入门其实挺容易的哈。
          上面就是我从对Android一无所知到入门的过程。这个过程很短,也就十几天时间,可是很多人却不肯迈出这一步。当时XX公司在我学校举办这个比赛时候,很多同学都知道,可是很少有人参加,因为以前大家都没接触过Android,所以就觉得这很神秘,很难,就放弃了。其实只要你愿意跨出这一步,就会觉得很多事情都很简单的。
           我现在已经是eoe和海卓网论坛的版主,每天都看很多管理很多Android方面的帖子,偶尔还会为刚入门的同仁解决一两个小问题。想想一月前连Android怎么拼写都不知道的我,真是应了那句话“天下无难事,只怕有心人”。


             二:QR生成器统览

             QR简单介绍:QR码是二维条码的一种,1994年由日本Denso-Wave公司发明。QR来自英文“Quick Response”的缩写,即快速反应的意思,源自发明者希望QR码可让其内容快速被解码。按我的理解,QR就像国内超市商品中常用的一维码一样,可以储存信息,然后可以被扫描识别信息。
             闲话少数,先上图

工程文件预览


主界面

名片信息编辑界面


QR图像


关于信息

              本程序最初做的包含两个Activity,程序完成后,代码差不多一千行,可是生成的二维码图片不能保存。后来仔细看了看Canvas,Btimap,SurfaceView,View的用法,觉得先前我用的方法根本不能实现保存,不得不换一个方法来生成QR图片,没想到这样改来改去,程序完成时候剩下一个Activity,代码不到四百行。一下子砍掉了一大半,自己都不敢相信,可见方法的重要性。这个问题的解决过程是很有意思的,也是我做这款软件收获比较大的地方,下面会详细说明的。
              简单使用说明:本程序不需要在因特网连接的环境下运行,它利用本地库编译运行,节省流量。用户运行软件后,会进入主界面,根据提示,用户可以选择“名片”“短信”“电子邮件”“文本”“网络书签”等按钮进入相应的信息编辑界面,在信息编辑界面编辑完信息后,就可以生成QR图像了,然后用户可以把图像保存下来。


              三:代码分析

              这篇文章的定位是开发经验的介绍,再细分一下就是新手开发经验介绍,新手写的,当然是给尚未入门或是刚入门的同学们看的,虽然这个APP代码部分没什么难点,但我还是会把一些很基础的东西列出来,分析我是如何逐步完成这个APP的,希望高手们不要见笑。

3.1:主界面和事件设计

              主界面用的是RadioGroup的组事件。RadioGroup可将各自不同的RadioButton设置于同一个Radio按钮组,同属一个RadioGroup组里的按钮,只能做出单一选择。

<RadioGroup
      android:id="@+id/select"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
    >
      <RadioButton
        android:id="@+id/select1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="名片"
      >
      </RadioButton>
      <RadioButton
        android:id="@+id/select2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="短信"
      >
      </RadioButton>
         <RadioButton
        android:id="@+id/select3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="电子邮件"
      >
      </RadioButton>
        <RadioButton
        android:id="@+id/select4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="文本"
      >
      </RadioButton>
        <RadioButton
        android:id="@+id/select5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="网址书签"
      >
      </RadioButton>
    </RadioGroup>


          当然,为了符合MVC的理念,最好把text的内容都写到String.xml中。
主界面的事件很简单,就是单击按钮,会跳到对应的界面。我把名片,短信等界面的控件的初始化和界面的现实都写到对应的函数里面,界面切换时候调用对应的函数就可以了。
 private RadioGroup.OnCheckedChangeListener mChangeRadio=new RadioGroup.OnCheckedChangeListener()
    {
    	@Override
    	public void onCheckedChanged(RadioGroup group,int checkedId)
    	{
    		if(checkedId==mRadioname.getId())
    		{
    			jumptolayoutbusinesscard();//跳到名片界面
    			
    		}
    		else if(checkedId==mRadiosms.getId())
    		{
    			jumptolayoutsms();//跳到短信界面
    		}
    		else if(checkedId==mRadioemail.getId())
    		{
    			jumptolayoutemail();//跳到电子邮件界面
    		}
    		else if(checkedId==mRadiotext.getId())
    		{
    			jumptolayouttext();//跳到文本界面
    		}
    		else
    		{
    			jumptolayouturl();//跳到网络标签界面
    		}
    	}
    };

          这样主界面和事件的设计就完成了,是不是觉得很简单呢,哈哈。

3.2:名片界面和事件设计

          名片,短信等这些界面的设计都是很初级的东西,一个TextView,对应一个EditText,然后再加上几个Button,就组成了这样的界面。
          这部分代码很简单,就不列出来了。
3.3:关于程序信息--Menu功能菜单

          用户单击Menu时,会弹出【关于】和【退出】按钮,【关于】会弹跳出AlertDialog,现实这个程序的“关于”信息,【退出】则会安全退出本程序。这部分功能对应三个简单的函数,大家看看就明白了。

 public boolean onCreateOptionsMenu(Menu menu)
    {
      menu.add(0, 0, 0, R.string.app_about);
      menu.add(0, 1, 1, R.string.str_exit);
      return super.onCreateOptionsMenu(menu);
    }
    
    public boolean onOptionsItemSelected(MenuItem item)
    {
      super.onOptionsItemSelected(item);
      switch(item.getItemId())
      {
        case 0:
          openOptionsDialog();
          break;
        case 1:
          finish();
          break;
      }
      return true;
    }
    
    private void openOptionsDialog()
    {
      new AlertDialog.Builder(this)
      .setTitle(R.string.app_about)
      .setMessage(R.string.app_about_msg)
      .setPositiveButton(R.string.str_ok,
          new DialogInterface.OnClickListener()
          {
           public void onClick(DialogInterface dialoginterface, int i)
           {
           }
           }
          )
      .show();
    }


3.4:自定义产生QRCode的函数

        难者不会,会者不难。这句话说的真好,你不要看下面的代码就寥寥几行,在这几行代码的背后,我可是费了很大功夫的。代码如下:
public Bitmap AndroidQREncode(String strEncoding, int qrcodeVersion) {
		Log.i("wwj", "QREncode");
		Bitmap canvasBmp = null;

		try {
			// 构建QRCode编码对象
			com.swetake.util.Qrcode testQrcode = new com.swetake.util.Qrcode();

			/* L','M','Q','H' */
			testQrcode.setQrcodeErrorCorrect('M');//错误修正率
			/* "N","A" or other */
			testQrcode.setQrcodeEncodeMode('B');
			/* 0-20 */
			testQrcode.setQrcodeVersion(qrcodeVersion);
			// getBytes
			byte[] bytesEncoding = strEncoding.getBytes("utf-8");

			if (bytesEncoding.length > 0) {
				// 转化成boolean数组
				bEncoding = testQrcode.calQrcode(bytesEncoding);
				int w = 320;
				int h = 240;
				canvasBmp = Bitmap.createBitmap(w, h, Config.ARGB_8888);//创建一个可改变的Bitmat对象
				Canvas cn = new Canvas(canvasBmp);//创建Canvas对象
				onDraw(cn);//调用画图函数
				cn.save(Canvas.ALL_SAVE_FLAG);
				cn.restore();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return canvasBmp;
	}

        需要说明的我都做了注释,这段代码用到了第三方的类库SwetakeQRCode.jar包,这个包在http://swetake.com可以下载(该程序使用的函数库版本为ver. 0.50 beta)。这段代码的主要作用就是利用jar包的函数库,把输入的信息转换成产生QR图片文件的二维数组。当然,在这个函数里面我们还创建了Bitmap和Canvas对象,这些都和后面介绍的图片保存有关。

3.5:既然已经生成了产生条形码的依据,剩下就是画图的问题了。

         做java的都知道,绘图肯定首先需要一个Canvas,然后在用Graphics在上面绘制自己想要图案。不错,Android上面也类似,你可以从一个Bitmap得到它的Canvas,进行绘制,也可以自定义一个View,用它的Canvas。不同的时,Android里没有Graphics,而用Paint代之,当然用法也稍有不同。
         单独说画图的问题,是很简单的,也有很多方法实现,可是涉及到绘图后的图片保存问题,画图问题貌似复杂了。绘制QR图片,我用到了两种方法,这里都列出来,让大家看看。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SurfaceView和Canvas绘图

         SurfaceView重写onDraw()方法是没有用的。SurfaceView中画图的关键对象Canvas对象必须要从一个SurfaceHolder对象获取:
Canvas canvas = holder.lockCanvas();

拿到canvas之后就可以进行绘画了。
         绘画完毕之后还要做的一件事就是提交绘画
holder.unlockCanvasAndPost();

         从方法的命名可以看出,这个方法将原来锁定的(lockCanvas())的画板解除锁定,然后将画板的内容Post提交出去,应该是提交给SurfaceView,然后显示出来。
//在SurfaceView上绘制QRCode条形码
  private void drawQRCode(boolean[][] bRect, int colorFill)
  {
    /* test Canvas*/
    int intPadding = 20;
    
  //绘图前先锁定Surfaceholder
    Canvas mCanvas01 = mSurfaceHolder01.lockCanvas();
  //设置画图绘图颜色
    mCanvas01.drawColor(getResources().getColor(R.drawable.white));
    
    //创建画笔
    Paint mPaint01 = new Paint();
    
    //设置画笔颜色和模式
    mPaint01.setStyle(Paint.Style.FILL);
    mPaint01.setColor(colorFill);
    mPaint01.setStrokeWidth(1.0F);
    
    //逐一加载boolean数组
    for (int i=0;i<bRect.length;i++)
    {
      for (int j=0;j<bRect.length;j++)
      {
        if (bRect[j][i])
        {
          //绘出条形码方块
          mCanvas01.drawRect
          (
            new Rect
            (
              intPadding+j*3+2,//左上边x
              intPadding+i*3+2,//左上边y
              intPadding+j*3+2+3,//右下边x
              intPadding+i*3+2+3//右下边y
             ), mPaint01
          );
        }
      }
    }
   //解锁并绘图
    mSurfaceHolder01.unlockCanvasAndPost(mCanvas01);
   
  }
  

         代码片段中用到的boolean数组就是从AndroidQREncode()函数中得到的。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Canvas和Bitmap绘图

         Canvas可以用来显示位图,可是Canvas画图本身位图没有关系,不过可以把Canvas和Bitmap联系起来,这样图像保存时候就大有用途了。你还记得这两行代码吗:
canvasBmp = Bitmap.createBitmap(w, h, Config.ARGB_8888);//创建可改变的Bitmat对象
Canvas cn = new Canvas(canvasBmp);//创建Canvas对象

         这两行代码的意思是canvasBmp是一个刚好canvas大小的空Bitmap ,Canvas画完该会自动保存到canvasBmp中。
public void onDraw(Canvas mCanvas01) {
		super.onDraw(mCanvas01);
		Log.i("wwj", "onDraw");
		int intPadding = 50;
		// 设置画图绘图颜色
		mCanvas01.drawColor(getResources().getColor(R.drawable.white));

		// 创建画笔
		Paint mPaint01 = new Paint();

		// 设置画笔颜色和模式
		mPaint01.setStyle(Paint.Style.FILL);
		mPaint01.setColor(getResources().getColor(R.drawable.black));
		mPaint01.setStrokeWidth(1.0F);

		// 逐一加载boolean数组
		for (int i = 0; i < bEncoding.length; i++) {
			for (int j = 0; j < bEncoding.length; j++) {
				if (bEncoding[j][i]) {
					// 绘出条形码方块
					mCanvas01.drawRect(new Rect(intPadding + j * 3 + 2,// 左上边x
							intPadding + i * 3 + 2,// 左上边y
							intPadding + j * 3 + 2 + 3,// 右下边x
							intPadding + i * 3 + 2 + 3// 右下边y
					), mPaint01);
				}
			}

		}
	}

        你没看错,这段代码和第一种方法的代码基本一模一样。我是这样理解的:Canvas绘图和SurfaceView和Bitmap都没有实质的关系,但是在创建Canvas对象时,Canvas有几种创建方式,一种是用SurfaceHolder对象获取,另一种是和Bitmap关联。用SurfaceView和Canvas绘图后,图像会显示在SurfaceView上。用Bitmap和Canvas绘图后,图像信息会储存在Bitmap对象中。

3.6:QR图像保存

        前面关于绘图的讨论那么多,就是为保存问题做铺垫。在Android上绘图后保存,貌似只能通过图像的Bitmap信息保存,也可能是我孤陋寡闻,只知道这一种方法。
public void saveMyBitmap(String bitName, Bitmap bmp) throws IOException {
		
		File f = new File("/sdcard/" + bitName + ".png");		
		f.createNewFile();	
		FileOutputStream fOut = null;
		try {
			fOut = new FileOutputStream(f);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		// Log.i("wwj",""+bmp);
		bmp.compress(Bitmap.CompressFormat.PNG, 100, fOut);
		try {
			fOut.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			fOut.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

        哈哈,看到了吧,还是那句话,难者不会,会者不难,仅仅一句代码,就把保存问题解决了。
bmp.compress(Bitmap.CompressFormat.PNG, 100, fOut);

        既然我只知道这一种图像保存的方法,那只能用第二种图像生成的方法了。不要只看表面改动了几行代码,其实这是牵一发而动全身的问题。也怪自己开发经验不足,程序耦合性太高,用第一种绘图方法时候是两个Activity,第二种绘图方法时把绘图这一块自定义了一个View,然后再Layout布局里面加载这个View,这样就不用intent和bundle传递和接受消息了,代码量自然就少了很多。


        现在每天上午8:30到下午5:30都在软件园实习,然后经过近一小时的“桑拿”公交才能回到宿舍,天天都累的散了架。博客只能晚上写,断断续续,这篇博客写了快一周了。写了改,改了写,也是为了让大家能看的更明白些。但感觉有些东西还是没有说清楚,很多函数都是关联的,单独把一个函数的代码贴出来,里面肯定有不清楚的地方,大家有疑问可以留言,我会一一回答的。
        我觉得,软件开发是没有捷径的,有的是经验,你写代码多了,看代码多了,遇到一个问题,自然就会有一个大概的解决方向,然后顺着这个方向走,基本就OK。
        以上就是我的拙见,请大家批评指正。
分享到:
评论
40 楼 Ghost友 2014-12-13  
楼主牛掰,我正好也弄了一下java-二维码打印,不过android方面还是瘦了很大启发。
可以发一下飞马吗?1730853800@qq.com
39 楼 李兵兵321 2014-07-15  
您好,楼主,偶然看到您的这篇博客,写的很好,自己现在是在读大三学生,现在也在研究二维码技术,上面有些地方看的不是很懂,所以想请楼主把这个完整的源码发我一份,真的请求您帮忙,开始试着研究了上面的代码,但是有些地方还是没搞懂。请楼主指导。我的邮箱是1337197343@qq.com
38 楼 1927105 2014-05-07  
鉴于很多人联系我索求源码,这里提供网盘下载

http://blog.csdn.net/spy19881201/article/details/25212343

哥怕骚扰,呵呵
37 楼 liupengfei19910320 2014-02-17  
楼主,我在学习二维码知识,你能不能给我发一下你的源码。我的邮箱yyyx0320@163.com
36 楼 chenwj312 2013-11-11  
LZ,求源码一份,邮箱是:403060188@qq.com,谢谢
35 楼 flasher 2013-11-06  
能给我发份源码吗?525979305@qq.com
34 楼 u2460001 2012-08-25  
我在学习二维码的东西
希望得要源代码
谢谢
u2460001@gmail.com
33 楼 嘟嘟橙 2012-05-22  
学习中,希望哪位有源码的哥们,给刚接触二维码的小弟也发一份,在此感谢。
邮箱:DaweiKoo@163.com。十分谢谢。
32 楼 De_Hink 2011-12-05  
哥们,发一下源码:11475640@qq.com
谢谢
31 楼 akane7 2011-11-09  
很詳細受用。。
麻煩LZ也發我一份源碼好嘛?
akakame7@gmail.com
30 楼 win7qi 2011-10-21  
求源代码!!! winqi_lee@live.com.my
29 楼 win7qi 2011-10-21  
求源代码!!
28 楼 xmxuejinfu 2011-10-21  
楼主用的是sweatke来生成的,俺最近正在研究zxing的生成,但是对画图这方面不是很懂,希望能借助楼主的例子,学习一下。。谢谢。277071292@qq.com
27 楼 srz159773 2011-10-14  
2390272@qq.com求源码
26 楼 wufjlsh 2011-03-24  
wufj008@126.com.求源码。
25 楼 常思己过 2010-12-21  
zjc_1226@163.com如果楼主方便,请给份源码,学习一下,谢谢!
24 楼 tdskee 2010-11-12  
tdskee@126.com
麻烦也发一份,感激.
23 楼 w3344kimo 2010-10-30  
你好:麻煩你也給我一份源碼吧!!我想了解一下你是怎麼寫的~

961090147@mail.oit.edu.tw  &  w3344kimo@yahoo.com.tw

謝謝!!
22 楼 harveyor 2010-10-21  
发给我一份源码吧:
harveyor@163.com
21 楼 feng88724 2010-10-19  
文章写的不错,很详细~~

不过这个框架功能比较局限,建议使用Zxing,功能很强大~

相关推荐

    安卓Android源码——zxing 生成二维码名片.rar

    在这个项目中,我们将关注如何使用ZXing库在Android应用中生成二维码名片。首先,我们来了解一下ZXing库的基本概念。 ZXing(读作“zebra crossing”,斑马线)是一个用于读取、写入多种一维和二维条码格式的Java库...

    安卓Andriod源码——zxing生成二维码名片.zip

    在Android开发中,有时我们需要集成二维码相关的功能,例如生成二维码名片。ZXing(Zebra Crossing)是一个开源的、跨平台的条码读写库,支持多种条码格式,包括二维码。在这个项目中,我们将深入探讨如何在Android...

    安卓Android源码——MakeBarcode.rar

    《安卓Android源码解析——MakeBarcode》 在安卓开发领域,理解源码是提升技术水平的重要途径,特别是对于一些核心功能的实现,如条形码(Barcode)生成。本篇文章将深入探讨“MakeBarcode”项目,这是一份针对...

    Android应用源码之二维码及条形码生成与扫描.zip

    在Android平台上,开发一款能够生成和扫描二维码及条形码的应用是一个常见的需求。这份压缩包文件"Android应用源码之二维码及条形码生成与扫描.zip"提供了完整的源代码示例,帮助开发者深入理解如何在Android应用中...

    安卓Android源码——实现竖屏二维码扫描.zip

    在安卓应用中集成ZXing,可以方便地实现在手机上扫描和生成这些编码。 首先,要使用ZXing实现二维码扫描,我们需要在项目中引入ZXing的相关依赖。这通常通过在build.gradle文件中添加ZXing的依赖库来完成,例如使用...

    安卓Android源码——条目二维码.zip

    在安卓(Android)平台上开发应用时,理解和使用源码对于提升开发效率和深入技术理解至关重要。"安卓Android源码——条目二维码.zip"这个压缩包很可能是包含了一个用于生成和扫描条形码或二维码的项目,名为...

    Android-EZxing——zxing的封装高效.

    在Android开发中,二维码和条形码扫描已经成为不可或缺的功能之一,而ZXing(Zebra Crossing)库就是一款广泛使用的开源库,用于处理这些任务。本文将深入探讨ZXing的封装库——EZxing,它为开发者提供了一个更加...

    Android源码——仿微信二维码名片源码_new_27.7z

    Zxing库包含了一个完整的二维码生成器和二维码扫描器,使得开发者能够轻松地集成到自己的应用中。 2. **二维码生成**:通过Zxing,开发者可以将文本、URL、联系人信息等数据编码成二维码图像。这个过程涉及编码算法...

    Android ZXing二维码——集成本地图片扫描、图片浏览器、相机扫描二维码、生成二维码

    本文将深入探讨如何在Android应用中集成ZXing二维码功能,包括本地图片扫描、图片浏览器和相机扫描二维码,以及如何生成二维码。 首先,我们需要在项目中添加ZXing的依赖。通常,我们可以通过Gradle来导入ZXing的...

    google android sdk开发范例大全 第二版 PDF 光盘代码

     10.4 手机QR Code二维条形码生成器   10.5 Android QR Code二维条形码扫描仪   10.6 上班族今天中午要吃什么   10.7 掷杯筊   10.8 电蚊香   10.9 转转轮盘——Lucky!   10.10 任务 .管...

    安卓Android源码——二维码扫描的实现.zip

    在安卓(Android)平台上开发应用时,二维码扫描功能是一个常见的需求。这个压缩包“安卓Android源码——二维码扫描的实现.zip”很可能包含了实现这一功能的完整源代码示例。二维码扫描可以让用户快速获取和分享信息...

    Android高级应用源码-android二维码扫描,很好用的资源.zip

    【Android高级应用源码——二维码扫描】 在移动开发领域,二维码扫描已经成为了一个不可或缺的功能,尤其在Android平台上。这个“Android高级应用源码-android二维码扫描”压缩包提供了实现这一功能的优秀资源,它...

    安卓Android源码——ZXingDemo.zip

    - **扫描与生成**:库提供扫描器(Scanner)用于捕获图像并解析条码,同时提供了生成器(Generator)用于创建自定义内容的条码或二维码。 2. **ZXingDemo应用结构** - **主活动(MainActivity)**:通常作为启动...

    Android扫描条形码 二维码,生成二维码源码

    在Android平台上,开发一款能够扫描条形码和二维码的应用,主要涉及到两个核心技术:条形码和二维码的识别以及生成。Zxing(ZXing,发音为“zebra crossing”)是一个开源项目,提供了多种条码图像处理功能,包括...

    Android 生成条码、二维码Demo

    ZXing(Zebra Crossing)是一个开源的条码解码库,它提供了Java版本的二维码和条码生成器。在Android项目中,我们通常会使用它的Android端分发版——`com.google.zxing:core`和`...

    安卓Android源码——使用ZXing识别条码二维码(简单的实现).zip

    这个压缩包“安卓Android源码——使用ZXing识别条码二维码(简单的实现)”包含了一个示例项目,展示了如何在Android应用中集成ZXing来实现条码和二维码的识别。 首先,我们需要了解ZXing库的基本原理。ZXing,又称...

    安卓Android源码——详细注释!二维码条码扫描源码,使用Zxingcore2.3.zip

    通过深入研究这个源码包,开发者不仅可以掌握如何在Android应用中集成二维码和条码扫描功能,还可以学习到Android相机使用、线程管理、UI设计等多个方面的知识,对提升个人技能和开发效率大有裨益。

    安卓Andriod源码——二维码扫描和生成亲测可用版BarCodeDemo.zip

    总之,Android的二维码扫描和生成是移动应用中常见的功能,通过理解"BarCodeDemo"源码,我们可以学习如何有效利用Zxing库,实现在Android应用中无缝集成二维码的扫描和生成。这对于提高用户体验和增强应用功能具有...

    android二维码扫描和生成,可以随便更改扫描框,基于Zxing改编

    在Android平台上,开发一个二维码扫描和生成功能是一个常见的需求,特别是在移动支付、信息分享等领域。本项目基于开源库Zxing(ZXing,意为“条形码扫描”)进行了改编,使得用户可以根据需要自由调整扫描框的样式...

Global site tag (gtag.js) - Google Analytics