1. 程式人生 > >Android實現二維碼掃描登入網頁

Android實現二維碼掃描登入網頁

    之前寫過一個二維碼掃描demo,用的Zxing的框架,點選下載,後續掃描二維碼中出現一些問題,比如解決壓縮圖片,調整掃描視窗大小等等。後續單位要求做掃描登入實現,發現難點就是怎麼知道你掃描的是這臺電腦,後臺必須獲取到(後臺技術的問題)然後把這個引數給我,再傳遞到後臺,後臺判斷登入即可。這樣自己掃描後直接傳遞個引數就可以實現登入了。效果如下:


大概程式碼實現:掃描跳轉:

			//掃描登入a
		case R.id.tv_more_qr:
			if (PventQuickClick.isFastDoubleClick()) {
				break;
			}
			DialogUtils.showCommonPopupWindow(context);
			MyApplication.checkLogin(context, new APPCallback() {

				@Override
				public void appCallback(String userid) {
					// TODO Auto-generated method stub
					DialogUtils.dismissCommonPopupWindow();
					Intent openCameraIntent = new Intent(context,CaptureActivity.class);//Zing框架的類
					startActivityForResult(openCameraIntent,0);
					
				}
			});
			
			break;
然後掃描後會返回掃描的結果在onActivityResult
@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		
		if (resultCode == getActivity().RESULT_OK) {
			Bundle bundle = data.getExtras();
			String qrResult = bundle.getString("result");
			LogUtils.log_e("qrResult", qrResult);
			int scan= qrResult.indexOf("+");
			//對切取字串判斷
			//登入
			if(scan>0){
				String starts = qrResult.substring(0, scan);
				String ends = qrResult.substring(scan+1, qrResult.length());
				LogUtils.log_e("starts", starts+"......."+ends);
				if(ends.equals("QrLogin")){
					Intent intent = new Intent(context,QrLogin.class);//跳轉到確認登入介面
					intent.putExtra("scanResult", starts);
					startActivity(intent);
				}
			}else if(StringUtils.getUrl(qrResult)){//是html的連結直接跳轉瀏覽器,比如apk下載等等
				Intent intent =new Intent();
		        intent.setAction("android.intent.action.VIEW");
		        Uri content_url =Uri.parse(qrResult);
		        intent.setData(content_url);
		        startActivity(intent);
			}else if(!StringUtils.getUrl(qrResult)){
				Toast.makeText(getActivity(), "客官,您掃的找不到呀!!", 0).show();
			}
		}
	}

然後跳轉到確認登入介面:點選判斷傳參:
	@Override
	protected void baseOnClick(View v) {
		switch (v.getId()) {
		case R.id.tv_qr_login:
//			Toast.makeText(QrLogin.this, "登入", 0).show();
			DialogUtils.showCommonPopupWindow(QrLogin.this);
			LinkedHashMap<String, String> get_checkqrcodelogin = new LinkedHashMap<String, String>();
			get_checkqrcodelogin.put("key", MyApplication.getUserState("loginkey"));// android 固定為1
			get_checkqrcodelogin.put("sessionid", sessionid);// android 固定為1
			HttpManager.GetCheckQrCodeLogin(get_checkqrcodelogin, new NetCallBack() {

				@Override
				public void callback(String result) {
					DialogUtils.dismissCommonPopupWindow();
					LogUtils.log_e("GetCheckQrCodeLogin", result);
					final CheckQrCodeLogin checkqrcode = JsonUtils.getBeanFromJson(
							result, CheckQrCodeLogin.class);
					if(checkqrcode.code.equals("1")){
						Toast.makeText(QrLogin.this, "登入成功", 0).show();
						finish();
					}
					
					
				}
			});
			break;

這樣就可以實現二維碼掃描登入,二維碼demo下載解決掃描框大小和圖片壓縮問題