足球游戏_中国足彩网¥体育资讯$

php生成Android客户端扫描可登录的二维码
来源:易贤网 阅读:1196 次 日期:2016-08-23 15:05:58
温馨提示:易贤网小编为您整理了“php生成Android客户端扫描可登录的二维码”,方便广大网友查阅!

本文实例为大家分享了php网页生成二维码,Android客户端扫描登录的具体代码,供大家参考,具体内容如下

使用了Github上具有扫码功能的ZXing开源库,使用了通过随机数生成二维码图片网络API,整个过程经过三步:

1.PHP网页生成二维码,相应随机数存储到数据库中;

2.Android客户端扫码,携带username保存至随机数对应的位置;

3.每隔一段时间,PHP通过Ajax轮询数据库,判断是否为空,不为空则跳转网页。

具体代码:

1. 通过随机数生成二维码图片,并执行轮询操作命令的主页面

<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. 数据库连接页面     

<?php

/**

 * 数据库连接文件

 * @author Cenquanyu

 * @version 2016年5月12日

 * 

 */

$con = mysql_connect("localhost","root","") or die(mysql_error());

mysql_select_db("qr_login");

?>

3.执行轮询操作的页面,username不为空则跳转     

<?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.自定义的API,对客户端的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. Android客户端执行扫码操作的Activity     

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. 网络请求类

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();

  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助。

中国足彩网信息请查看网络编程
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 足球游戏_中国足彩网¥体育资讯$ 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65099533/13759567129 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:易贤网
云南网警报警专用图标