Android二维码、条形码开发包(有源码)

来源:互联网 发布:数据库设计教程 pdf 编辑:程序博客网 时间:2024/05/21 10:33

二维码开发包

google.zxing.android.aar下载 基本ZXing V3.3.1

image

image

二维码开发包的使用方法

  1. 参见 引入aar的方法

  2. AndroidManifest.xml 中添加

        <activity            android:name="com.google.zxing.client.android.CaptureActivity"            android:clearTaskOnLaunch="true"            android:stateNotNeeded="true"            android:theme="@style/CaptureTheme"            android:windowSoftInputMode="stateAlwaysHidden">            <intent-filter>                <action android:name="com.google.zxing.client.android.SCAN"/>                <category android:name="android.intent.category.DEFAULT"/>            </intent-filter>            <!-- Allow web apps to launch Barcode Scanner by linking to http://zxing.appspot.com/scan. -->            <intent-filter>                <action android:name="android.intent.action.VIEW"/>                <category android:name="android.intent.category.DEFAULT"/>                <category android:name="android.intent.category.BROWSABLE"/>                <data android:scheme="http" android:host="zxing.appspot.com" android:path="/scan"/>            </intent-filter>            <!-- We also support a Google Product Search URL. -->            <intent-filter>                <action android:name="android.intent.action.VIEW"/>                <category android:name="android.intent.category.DEFAULT"/>                <category android:name="android.intent.category.BROWSABLE"/>                <data android:scheme="http" android:host="www.google.com" android:path="/m/products/scan"/>            </intent-filter>            <!-- And the UK version. -->            <intent-filter>                <action android:name="android.intent.action.VIEW"/>                <category android:name="android.intent.category.DEFAULT"/>                <category android:name="android.intent.category.BROWSABLE"/>                <data android:scheme="http" android:host="www.google.co.uk" android:path="/m/products/scan"/>            </intent-filter>            <!-- Support zxing://scan/?... like iPhone app -->            <intent-filter>                <action android:name="android.intent.action.VIEW"/>                <category android:name="android.intent.category.DEFAULT"/>                <category android:name="android.intent.category.BROWSABLE"/>                <data android:scheme="zxing" android:host="scan" android:path="/"/>            </intent-filter>        </activity>
  1. 打开二维码、条形码界面
    /** 二维码标记 */    private static final int $Result_Scan = 17081;        Intent v_CaptureIntent = new Intent(MainActivity.this ,CaptureActivity.class);
  // 设置二维码编码。可选的,当不设置时,默认为ISO-8859-1  v_CaptureIntent.putExtra(Intents.Scan.CHARACTER_SET ,"GBK");      // 设置标题文字  v_CaptureIntent.putExtra(CaptureActivity.$Title ,"二维码");
startActivityForResult(v_CaptureIntent ,$Result_Scan);
  1. 获取二维码、条形码的信息
    @Override    protected void onActivityResult(int i_RequestCode, int i_ResultCode, Intent i_Data)    {        // 扫描二维码回传        if ( i_RequestCode == $Result_Scan )        {            if ( i_ResultCode == RESULT_OK && i_Data != null )            {                // 码信息                String  v_Content    = i_Data.getStringExtra( CaptureActivity.$Decode_Content_Key);                // 码类型(ture:二维码  false:条形码)                boolean v_QRCodeType = i_Data.getBooleanExtra(CaptureActivity.$Decode_QRCodeType ,true);                                ...            }        }    }
  1. (可选)更改界面的上任一文字信息,如改标题 打开values/string_hy.xml中的信息,在新的App应用中,

在values/string.xml覆盖重写即可

    <string name="title_qrcode">改标题</string>
  1. (可选)中文识别
    /** 二维码的识别编码 */    private static final String    $2DCharEncoding     = "GBK";    /** 二维码识别后的转码的字符集 */    private static final String [] $2DCharEncodingTos  = {"UTF-8" ,$2DCharEncoding ,"ISO-8859-1" ,"GB2312" ,"GB18030" ,"Big5" ,"ASCII" ,"UTF-16" ,"UTF-32" ,"Shift-JIS"};    /**     * 简单判定文本是否为乱码     *     * @param i_Text     * @return     */    private boolean isToCharEncodingError(String i_Text)    {        return StringHelp.isContains(i_Text ,"??" ,"" ,"㼿" ,"ä" ,"" ,"å" ,"§" ,"Ð" ,"¾","\uE21E");    }                // 转换编码,防止如中石油发票上二维码的乱码    String v_2DCE = "";    for (int i=0; i<$2DCharEncodingTos.length; i++)    {        v_2DCE = StringHelp.toCharEncoding(v_Content ,$2DCharEncoding ,$2DCharEncodingTos[i]);        if ( !isToCharEncodingError(v_2DCE) )        {            break;        }    }    if ( isToCharEncodingError(v_2DCE) )    {        // 可能原本就是默认的编码,此判定必须放在最后        v_2DCE = v_Content;    }
  1. (可选)横屏、竖屏的改变
    // true为竖屏; false为横屏    HYControl.$Direction = true;
  1. 注意:网址http前缀转小写后,才能正确调用系统浏览器打开网址。并且前后不能有空格。
    v_Content = v_Content.trim();    if ( v_Content.toLowerCase().startsWith("http") )    {        v_Content = v_Content.substring(0 ,5).toLowerCase() + v_Content.substring(5);    }
  1. 固有权限在 AndroidManifest.xml 中配置
    <uses-permission android:name="android.permission.CAMERA"/>    <uses-permission android:name="android.permission.VIBRATE" />    <uses-permission android:name="android.permission.FLASHLIGHT" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  1. 动态权限的申请 用 EasyPermissions 来动态申请
    public class MainActivity implements EasyPermissions.PermissionCallbacks    {        @AfterPermissionGranted($Permission_QRCode)        private void permissionQRCode()        {            String [] perms = {Manifest.permission.CAMERA                              ,Manifest.permission.VIBRATE                              ,Manifest.permission.READ_EXTERNAL_STORAGE                              ,Manifest.permission.WRITE_EXTERNAL_STORAGE                              ,Manifest.permission.READ_PHONE_STATE};                if (!EasyPermissions.hasPermissions(this, perms))            {                EasyPermissions.requestPermissions(this, "扫描二维码需要打开相机的权限", $Permission_QRCode, perms);            }        }                @Override        public void onPermissionsGranted(int requestCode, List<String> perms)        {            // 获取成功的权限列表        }                @Override        public void onPermissionsDenied(int requestCode, List<String> perms)        {            // 获取失败的权限列表        }                @Override        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)        {            super.onRequestPermissionsResult(requestCode, permissions, grantResults);                // EasyPermissions handles the request result.            EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);        }    }
  1. 本模块引用 zxing.jar 包,其源码链接如下

引用 https://github.com/HY-ZhengWei/hy.common.base 类库

引用 https://github.com/HY-ZhengWei/hy.common.zxing 类库

原创粉丝点击