精华内容
下载资源
问答
  • android二维码工程之仿QQ二维码实现

    千次阅读 2015-01-04 16:18:16
    二维码发展到现在几乎是每一个App都有的功能,之前项目用到了二维码功能就研究了下如何嵌入zxing二维码工程,之前的用法制包含了最基本的二维码扫码工能,用QQ时看到QQd的扫一扫,功能相对较全,可以扫图片,可以开闪光...

        二维码发展到现在几乎是每一个App都有的功能,之前项目里用到了二维码功能就研究了下如何嵌入zxing二维码工程,之前的用法制包含了最基本的二维码扫码工能,用QQ时看到QQd的扫一扫,功能相对较全,可以扫图片,可以开闪光灯,还可以生成二维码,都是比较常用的功能,于是就仿照QQ的二维码样式和功能,自己也做了一个common工程,这样,以后要用二维码是就不必再做配置等工作了,直接关联到这个二维码工程即可.文章最后我会将整个工程上传到我的资源中,有需要的可以下载。


        下面先看一下整体效果图:                                                                   点击相册后的效果图:         

        

        开灯后的效果图和设备串号生成的二维码:

       

      

         由于没有美工配合,样子真心是不如QQ好看,好在功能基本都实现了,相册就是从本地图库中选去二维码扫描,开灯就是打开手机闪光灯,二维码是将手机序列号生成一个二维码。下面是代码部分,改动的地方和添加的地方都做了注释,相信大家能看懂。‘

       1.相册功能添加代码,代码添加在zxing工程已有的CaptureActivity.java类中。

        相册点击事件处理:

    	public void onClick(View v)
    	{
    		switch (v.getId())
    		{
    		case R.id.photo_btn:
    			// 打开手机中的相册
    			Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT); // "android.intent.action.GET_CONTENT"
    			innerIntent.setType("image/*");
    			Intent wrapperIntent = Intent.createChooser(innerIntent, "选择二维码图片");
    			this.startActivityForResult(wrapperIntent, REQUEST_CODE);
    			break;
                   }
         }
    
    
        利用zxing执行图片扫码:
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    	{
    		super.onActivityResult(requestCode, resultCode, data);
    		if (resultCode == RESULT_OK)
    		{
    			switch (requestCode)
    			{
    			case REQUEST_CODE:
    				// 获取选中图片的路径
    				Cursor cursor = getContentResolver().query(data.getData(), null, null, null, null);
    				if (cursor.moveToFirst())
    				{
    					photo_path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
    				}
    				cursor.close();
    				new Thread(new Runnable()
    				{
    					@Override
    					public void run()
    					{
    						Result result = scanningImage(photo_path);
    						if (result != null)
    						{
    							Message m = mHandler.obtainMessage();
    							m.what = PARSE_BARCODE_SUC;
    							m.obj = result.getText();
    							mHandler.sendMessage(m);
    						}
    						else
    						{
    							Message m = mHandler.obtainMessage();
    							m.what = PARSE_BARCODE_FAIL;
    							m.obj = "Scan failed!";
    							mHandler.sendMessage(m);
    						}
    					}
    				}).start();
    
    				break;
    
    			}
    		}
    	}
    
        scanneringImage()方法代码:
    /**
    	 * 扫描二维码图片的方法
    	 * 
    	 * @param path
    	 * @return
    	 */
    	public Result scanningImage(String path)
    	{
    		if (TextUtils.isEmpty(path))
    		{
    			return null;
    		}
    		Hashtable<DecodeHintType, String> hints = new Hashtable<DecodeHintType, String>();
    		hints.put(DecodeHintType.CHARACTER_SET, "UTF8"); // 设置二维码内容的编码
    
    		BitmapFactory.Options options = new BitmapFactory.Options();
    		options.inJustDecodeBounds = true; // 先获取原大小
    		scanBitmap = BitmapFactory.decodeFile(path, options);
    		options.inJustDecodeBounds = false; // 获取新的大小
    		int sampleSize = (int) (options.outHeight / (float) 200);
    		if (sampleSize <= 0)
    			sampleSize = 1;
    		options.inSampleSize = sampleSize;
    		scanBitmap = BitmapFactory.decodeFile(path, options);
    		RGBLuminanceSource source = new RGBLuminanceSource(scanBitmap);
    		BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));
    		QRCodeReader reader = new QRCodeReader();
    		try
    		{
    			return reader.decode(bitmap1, hints);
    
    		}
    		catch (NotFoundException e)
    		{
    			e.printStackTrace();
    		}
    		catch (ChecksumException e)
    		{
    			e.printStackTrace();
    		}
    		catch (FormatException e)
    		{
    			e.printStackTrace();
    		}
    		return null;
    	}
       2.开闪光灯,下面是开闪光灯要添加的代码,代码添加在CameraManager.java中。

    	/**
    	 * 通过设置Camera打开闪光灯
    	 */
    	public void turnLightOn()
    	{
    		if (camera == null)
    		{
    			return;
    		}
    		Parameters parameters = camera.getParameters();
    		if (parameters == null)
    		{
    			return;
    		}
    
    		List<String> flashModes = parameters.getSupportedFlashModes();
    		if (flashModes == null)
    		{
    			return;
    		}
    		String flashMode = parameters.getFlashMode();
    		Log.i(TAG, "Flash mode: " + flashMode);
    		Log.i(TAG, "Flash modes: " + flashModes);
    		// 闪光灯关闭状态
    		if (!Parameters.FLASH_MODE_TORCH.equals(flashMode))
    		{
    			// Turn on the flash
    			if (flashModes.contains(Parameters.FLASH_MODE_TORCH))
    			{
    				parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
    				camera.setParameters(parameters);
    				camera.startPreview();
    			}
    			else
    			{
    			}
    		}
    	}
    
    	/**
    	 * 通过设置Camera关闭闪光灯 
    	 * @param mCamera
    	 */
    	public void turnLightOff()
    	{
    		if (camera == null)
    		{
    			return;
    		}
    		Parameters parameters = camera.getParameters();
    		if (parameters == null)
    		{
    			return;
    		}
    		List<String> flashModes = parameters.getSupportedFlashModes();
    		String flashMode = parameters.getFlashMode();
    		// Check if camera flash exists
    		if (flashModes == null)
    		{
    			return;
    		}
    		// 闪光灯打开状态
    		if (!Parameters.FLASH_MODE_OFF.equals(flashMode))
    		{
    			// Turn off the flash
    			if (flashModes.contains(Parameters.FLASH_MODE_OFF))
    			{
    				parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
    				camera.setParameters(parameters);
    			}
    			else
    			{
    				Log.e(TAG, "FLASH_MODE_OFF not supported");
    			}
    		}
    	}
      3.生成二维码,代码添加在CaptureActivity.java类中。

    /***
    	 * 获得手机设备的串号
    	 * @param context
    	 * @return
    	 */
    	public static String getIMEI(Context context)
    	{
    		TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    		// Get deviceId
    		String deviceId = tm.getDeviceId();
    		// If running on an emulator
    		if (deviceId == null || deviceId.trim().length() == 0 || deviceId.matches("0+"))
    		{
    			deviceId = (new StringBuilder("EMU")).append((new Random(System.currentTimeMillis())).nextLong())
    					.toString();
    		}
    		return deviceId;
    	}
    
         /**
          * 生成二维码方法
          */
         private Bitmap createQRCode()
        {
            int QR_WIDTH = 100;
            int QR_HEIGHT = 100;
    
            try
            {
                // 需要引入core包
                QRCodeWriter writer = new QRCodeWriter();
    
                String mime= getIMEI(this);
                if (text == null || "".equals(text) || text.length() < 1)
                {
                    return null;
                }
    
                // 把输入的文本转为二维码
                BitMatrix martix = writer.encode(text, BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT);
    
                System.out.println("w:" + martix.getWidth() + "h:" + martix.getHeight());
    
                Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
                hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
                BitMatrix bitMatrix = new QRCodeWriter().encode(text, BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);
                int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
                for (int y = 0; y < QR_HEIGHT; y++)
                {
                    for (int x = 0; x < QR_WIDTH; x++)
                    {
                        if (bitMatrix.get(x, y))
                        {
                            pixels[y * QR_WIDTH + x] = 0xff000000;
                        }
                        else
                        {
                            pixels[y * QR_WIDTH + x] = 0xffffffff;
                        }
    
                    }
                }
    
                // cheng chen de er wei ma
                Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT, Bitmap.Config.ARGB_8888);
                bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
    
                return bitmap;
            }
            catch (WriterException e)
            {
                e.printStackTrace();
            }
            return null;
        }
    

      初始工程的配置和对扫描框的修改都参考了这篇博客,大家可以看下。http://blog.csdn.net/xiaanming/article/details/10163203.

     项目源码

     

     

    展开全文
  • 很多酷画册用户,在做好画册之后,希望把画册嵌入自己的公众号,以便进行更好地营销。 嵌入已认证公众号 对于已认证公众号,可以通过自定义菜单,嵌入画册。...从酷画册下载电子画册/书架的二维码图片

    很多酷画册用户,在做好画册之后,希望把画册嵌入自己的公众号,以便进行更好地营销。

    嵌入已认证公众号

    对于已认证公众号,可以通过自定义菜单,嵌入画册。

    进入公众号后台,选择自定义菜单,编辑菜单,如下图所示:

    图

    保存并发布,生效后的公众号菜单,如下图所示:

    图

    嵌入未认证公众号

    未认证的公众号,菜单不能跳转到外链。我们可以使用公众号文章来嵌入画册。

    方法1:原文链接

    在发布的公众号文章里,添加电子画册/书架的链接为原文链接。如下图所示:

    图

    方法2:文章中添加画册二维码图片

    从酷画册下载电子画册/书架的二维码图片,然后插入到公众号文章中。这样读者就可以直接长按二维码识别打开阅读电子画册了。

    如下图所示:

    图

    文章完成后,可以创建一个公众号菜单,链接到文章。这样用户可以点击菜单,打开文章,在文章中长按二维码或点击原文链接,打开画册。

    展开全文
  • 目前微信公众平台只支持图文推送,在后台的“图文消息”添加的正文内容,仅支持插入图片、腾讯视频、微视以及投票,以及添加“原文链接”,不能嵌入代码,也不能在正文内容添加链接,也就是说我们不能把做好的电子...

    目前微信公众平台只支持图文推送,在后台的“图文消息”里添加的正文内容,仅支持插入图片、腾讯视频、微视以及投票,以及添加“原文链接”,不能嵌入代码,也不能在正文内容添加链接,也就是说我们不能把做好的电子杂志以链接的形式放在正文供用户点击浏览,也不能像网页一样将电子杂志直接嵌入微信后台。

    不过微信有长按识别二维码功能,长按二维码微信会自动打开二维码链接的内容。云展网上的每一本书都自动生成了二维码,所以云展网的每一本书都能发布到微信公众平台。操作步骤如下:

    1、打开云展网,找到要发布在微信公众台的电子杂志。找到相应书籍的二维码,保存到本地。
    在这里插入图片描述
    2、打开您的微信公众平台,新建消息
    在这里插入图片描述
    3、编辑相应的图文,排版好位置将二维码通过本地上传插入到相应位置,请提醒用户长按二维码识别书籍
    在这里插入图片描述
    4、预览编辑好的文章确认手机阅读排版无误之后,即可以发布

    PS:原文链接也可以附上电子杂志的分享链接。

    展开全文
  • 除了提供大屏系统外,还将每个模块都做了独立的模块示例界面,每个模块都可以独立学习使用,里面用到的控件也单独做了控件示例界面,方便学习每个控件如何使用,考虑着实周到! 超级详细的开发和使用手册,其中包括...

空空如也

空空如也

1 2
收藏数 40
精华内容 16
关键字:

图片里如何嵌入二维码