android扫码登录

         在家里没事干,想到网站扫码登录原理,做了一下,由于需要服务器端支持,所以顺便学了一下PHP怎么做接口。

         先说下服务器端,我使用了wampserver搭建了一个本地服务器环境。使用的是mysql数据库

        我已经建了一个数据库qrlogin,表名loginrecord


表结构如下:


首先做了一个类来连接数据库

<?php
$con = mysql_connect("localhost", "root", "") or die(mysql_error()) ;
mysql_select_db("qrlogin");
?>
这是index.php的代码,其中包括了轮询数据库
<!DOCTYPE html>
<html>
	<head>
		<title >QRLogin</title>
		<meta charset="utf-8" />
	</head>

	<body>
		<?php
		require "mysql_connect.php";
		$randnumber = "";
		for ($i = 0; $i < 8; $i++) {
			$randnumber .= rand(0, 9);
		}
		echo $randnumber;
		mysql_query("insert into loginrecord (randnumber) values($randnumber)");
		?>
		<img src="http://qr.topscan.com/api.php?text=<?php echo $randnumber; ?>" width="300px"/>
		<input hidden="hidden"  style="display: none;"type="text"  name= "randnumber" id="randnumber" value="<?php echo $randnumber; ?>"/>
	</body>
	<script>function polling() {
	var xmlHttp;
	var ht;
	if(window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	} else {
		xmlHttp = new ActiveXObject("Microsoft.XMLHttp");
	}
	xmlHttp.onreadystatechange = function() {
		if(xmlHttp.status == 200 && xmlHttp.readyState == 4) {
			result = xmlHttp.responseText;

			if(result == 'true')
				window.location.href = "welcome.php";
		}
	}
	ht = document.getElementById('randnumber').value;
	xmlHttp.open("GET", "polling.php?randnumber=" + ht, true);
	xmlHttp.send();
}
setInterval("polling()", 1000);</script>
</html>

  算了php的代码不说了下面来研究下原理,android客户端首先获取扫码权限,进行扫码,二维码为随机生成,然后我们在android引入框架zxing用于解析二维码的内容,然后将内容发给服务器,服务器收到后修改数据库,一旦数据库改变,就跳转到welcome.php界面。

下面是mainactivity类。注意WEB_URL要写自己服务器的地址。

package com.example.qrlogin;

import com.zxing.activity.CaptureActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity implements OnClickListener{
    private Button btn_Scan;
    private  EditText edt_username;
    public static final String WEB_URL = "http://192.168.0.102/";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		ViewFind();
	}
	private void ViewFind() {
       btn_Scan = (Button)findViewById(R.id.btn_scan);	
       edt_username = (EditText)findViewById(R.id.username);
       btn_Scan.setOnClickListener(this);
	}
   @Override
public void onClick(View v) {
	   //扫码操作
	  Intent intent =new Intent(this,CaptureActivity.class);
	  startActivityForResult(intent, 0);
}
       @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	super.onActivityResult(requestCode, resultCode, data);
    	if(resultCode==Activity.RESULT_OK){
    		String randnumber = data.getExtras().getString("result");
    		String username = edt_username.getText().toString();
    		String url = WEB_URL+"saveUserName.php?randnumber="+randnumber+"&username="+username; 
    		Log.e(url, "url"+url);
    		HttpUtils.login(url);
    	}
    }
}

HttpUtils封装了一个get方法,用于请求服务器。不再贴代码了。

地址点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小阳世界2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值