安卓通过zxing提供二维码扫码功能

二维码已经出现在我们周围不少地方了,一般都是用手机软件扫码二维码,那么我们如何去给手机应用增加一个扫码二维码的功能呢?

网上有很多zxing包的使用方法,但是多数都不够详细。现在我从一个新手角度去做,如何把zxing包应用到项目中。

建议先建一个测试工程,里面只放一个按钮(或者加一个显示扫码结果的框,这里我们只用土司的方法显示),加上事件响应。


这是模拟器上的界面,点击Button就可以打开相机扫码


模拟器调用的是 电脑的前置,所以成了这样,在手机上是竖屏的.

下面我们看看代码部分吧

public class MainActivity extends Activity {


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}


	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

        //扫码的按钮
	public void btn1(View v) {
                   //声明一个活动跳转器,设置mainAcitivy与CaptureActivity之间跳转
		Intent intent = new Intent(this, CaptureActivity.class);
		startActivityForResult(intent,
				CaptureActivity.CaptureActivity_Scan_requestCode);
	}

        //获得结果的按钮
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);

                  //用土司显示,msg在CaptureActivity中可以找到
                  //如果有其他活动,通过requestCode去区分
		Toast.makeText(this, data.getStringExtra("msg"), 1).show();
	}


}
这里很简单,但是扫码二维码还需要手机提供权限所以我们要在AndroidManifest.xml中注册活动和申请权限

申请如下权限:

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

注册活动:

  <activity
            android:name="com.libs.zxing.CaptureActivity"
            android:clearTaskOnLaunch="true"
            android:configChanges="orientation|keyboardHidden"
            android:screenOrientation="portrait"
            android:stateNotNeeded="true"
            android:theme="@android:style/Theme.NoTitleBar"
            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:host="zxing.appspot.com"
                    android:path="/scan"
                    android:scheme="http" />
            </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:host="www.google.com"
                    android:path="/m/products/scan"
                    android:scheme="http" />
            </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:host="www.google.co.uk"
                    android:path="/m/products/scan"
                    android:scheme="http" />
            </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:host="scan"
                    android:path="/"
                    android:scheme="zxing" />
            </intent-filter>
        </activity>
最后只剩下导包了。因为本身包比较大,而我们应用又用不着这么多的功能,所以我们就以外部工程依赖的方法来使用zxing包。

下载我提供的压缩包,然后解压出来,导入到JDT工程中

既然说是新手,那教一下如何导入工程吧

File ->   Import  ->选中Gengral下的  ->next   ->新界面的Browse ->然后找到刚刚解压的文件夹确定就可以了

资源管理器就有这个工程了

接下来我们用测试项目(我的项目名叫xx)
对着项目名右键->Propertirs ->选择Android,在Lirbrary右边点Add,选中工程ZXingCodeLibs就可以了。

然后你的测试项目就可以运行了,如果出现提示错误记得考虑导包。

还有就是如果进了相加你却按返回不扫码的会应用会闪退,这是因为你没有处理活动无结果

在刚才的java代码里有提到requestCode,它用来区分活动结果属于哪一个所以,我们在onActivityResult方法中加入这个判断就可以了。实际上它对活动结果无结果是不处理

if (requestCode == CaptureActivity.CaptureActivity_Scan_requestCode) {
			if (resultCode == CaptureActivity.CaptureActivity_Scan_resultCode) {
				String str = data.getStringExtra("msg");
				//这里填入你对扫码结果str的处理
			}
		}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值