The example in this article shares with you a php web page that generates a QR code, and the Android client scans it to log in. The specific code is for your reference. The specific content is as follows
Used the ZXing open source library with code scanning function on Github, and used the network API to generate QR code images through random numbers. The whole process went through three steps:
1. The PHP webpage generates a QR code and the corresponding random number is stored in the database;
2. Scan the code with the Android client and save the username to the location corresponding to the random number;
3. Every once in a while, PHP polls the database through Ajax to determine whether it is empty. If not, it will jump to the web page.
Specific code:
1. Generate a QR code image through random numbers and execute the main page of the polling operation command
<html> <head> <title>qrlogin</title> <meta charset="UTF-8"/> </head> <body> <?php /** * @author Cenquanyu * @version 2016年5月12日 * */ require 'mysql_connect.php'; $randnumber = ""; for($i=0;$i<8;$i++){ $randnumber.=rand(0,9); } //将生成的随机数保存至数据库 mysql_query("insert into login_data (randnumber) values ('$randnumber')") ?> <img src="http://qr.liantu.com/api.php?text=<?php echo $randnumber;?>" width="300px"/> <input hidden="hidden" type="text" name="randnumber" id="randnumber"value="<?php echo $randnumber;?>"/> </body> <script> xmlHttpRequest.onreadystatechange = function(){ if(xmlHttpRequest.status == 200 && xmlHttpRequest.readyState ==4){ result = xmlHttp.responseText; if(result==true){//username不为空则跳转页面 window.location.href='welcome.php'; } } } } function polling(){ //执行轮询操作 var xmlHttpRequest; if(window.XMLHttpRequest){ xmlHttpRequest = new XMLHttpRequest(); } else{ xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } randnumber = document.getElementById('randnumber').value; xmlHttpRequest.open("GET","polling.php?randnumber="+ randnumber,true); xmlHttpRequest.send(); } setInterval("polling()",1000); </script> </html>
2. Database connection page
<?php /** * 数据库连接文件 * @author Cenquanyu * @version 2016年5月12日 * */ $con = mysql_connect("localhost","root","") or die(mysql_error()); mysql_select_db("qr_login"); ?>
3. The page that performs polling operation, jump if username is not empty
<?php /** * @author Cenquanyu * @version 2016年5月12日 * 执行轮询操作,查询随机数在数据库中的相应位置的username字段为不为空 * 为空,则返回false,页面不跳转 * 不为空,则说明有用户进行了该二维码的扫码登录,页面进行跳转 */ require 'mysql_connect.php'; $randnumber = $_GET['randnumber']; $result = mysql_query("select * from login_data where randnumber='$randnumber'"); $row = mysql_fetch_array($result); if($row['username']!="") echo "true"; else echo "false"; ?>
4. Customized API to save the client’s username
<?php /** * @author Cenquanyu * @version 2016年5月12日 * 自定义API用于Android客户端扫码登录,将客户端的username保存至二维码对应的随机数在数据库中的相应位置。 * 参数:username,randnumber * 无返回值 */ $randnumber = $_GET('randnumber'); $username = $_GET('username'); require 'mysql_connect.php'; mysql_query("update qr_login set username='$username' where randnumber= '$randnumber'"); ?>
5. Activity for Android client to perform QR code scanning operation
package com.Cenquanyu.qrlogin; import com.Cenquanyu.qrlogin.R; import com.zxing.activity.CaptureActivity; import android.app.Activity; import android.content.Intent; import android.graphics.Paint.Cap; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; /** * @author Cenquanyu * @version 2016年5月12日 * */ public class MainActivity extends Activity implements OnClickListener { private Button btnScan; private EditText etUsername; private static final String WEB_URL = "http://172.31.19.202/QRLogin/";//改成PC端相应地址 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnScan = (Button) findViewById(R.id.btnScan); btnScan.setOnClickListener(this); etUsername = (EditText) findViewById(R.id.etUsername); } @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 = etUsername.getText().toString(); String url = WEB_URL + "saveUsername.php?randnumber=" + randnumber + "&username=" + username; HttpUtils.login(url);//访问url } } }
6. Network request class
package com.Cenquanyu.qrlogin; import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class HttpUtils{ public static void login(final String url){ new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection; try { connection = (HttpURLConnection) new URL(url).openConnection(); connection.setRequestMethod("GET"); connection.getInputStream(); } catch (Exception e) { e.printStackTrace(); } } }).start(); } }
The above is the entire content of this article, I hope it will be helpful to everyone’s study.