登录 立即注册
安币:

查看: 383|回复: 4

android实现扫描网页二维码进行网页登录功能

[复制链接]

501

主题

987

帖子

332

安币

手工艺人

发表于 2018-3-13 10:29:24 | 显示全部楼层 |阅读模式

            

        先说一下实现了什么效果,app扫描php写的页面(也可以java网页,都一样的思路和步骤),扫描成功后跳转进入主页,光和你们这么说,肯定有人说了,没图说个jb,这就出来一个问题,很多人写博客,看这标题特别符合自己的问题,然后兴致勃勃的进来了,一看,我去...尼玛全是代码,也不知道是不是我的那种问题和想要的那种效果,心里没谱啊,好了,上图:

        

201712050833571.jpg
201712050833572.jpg
201712050833573.jpg
201712050833574.jpg
201712050833585.jpg

        

        别纠结这页面咋这么丑,没写样式,说一下我实现的思路哈,首先在数据库中新建一个表用来存储扫码登录信息(id,username,randomnum),这三个分别是id自增长,用户名,随机数――>点击生成二维码,生成随机数,可以用http://qr.topscan.com/api.php

[Java] 查看源文件 复制代码
else if ($_request['act'] != '' && $_request['act'] == 'codecreate') {
  //if username为空--->表示网页第一次点击新建生成
  //网页生成二维码操作,同时添加数据到表中
  if ($_request['username'] != '') {//不为空的时候表示修改
    $username = $_request['username'];
    $randomnum = $_request['randomnum'];
    echo "扫码成功";
    $sql = "update usercodelogin set username='$username' where randomnum='$randomnum'";
//    mysqli_query($conn, $sql);//插入成功
  } else {//为空的时候表示是新建二维码
    //生成随机数
    $randomnum = "";
    for ($i = 0; $i < 5; $i++) {
      $randomnum .= rand(0, 9);
    }
    echo $randomnum;//显示生成的随机数
    $sql = "insert into usercodelogin(username,randomnum) values ('','$randomnum')";
//    mysqli_query($conn, $sql);//插入成功
  }
  mysqli_query($conn, $sql);//插入成功

} else if ($_request['act'] != '' && $_request['act'] == 'codeselect') {//根据随机数查询表中的username是否为空
  $randomnum = $_request['randomnum'];
  if ($randomnum == '' && empty($randomnum)) {
  } else if ($randomnum != '') {
    $sql = "select username from usercodelogin where randomnum='$randomnum'";
    $result = mysqli_query($conn, $sql);
//    print_r($result);
    if (mysqli_num_rows($result) > 0) {
      while ($row = mysqli_fetch_assoc($result)) {
        $username = $row['username'];
      }
      if ($username == '' && $username == null) {
        //说明客户端还未扫码修改过
      } else if ($username != '') {
        //客户端扫码完成
        //跳转页面
        echo "客户端扫码成功,跳转中...";
      }
    }
  }

        然后是login.html

[Java] 查看源文件 复制代码
<html>
<head>
  <title>这是首页</title>
</head>
<script type="text/javascript" src="js/jquery-1.12.3.js"></script>
<body>
<script type="text/javascript">
  var type = 1;
  var randomnum;

  function clickbtn() {
    $.post("../login.php

        上边就是服务端的部分代码,放心有源码,下边写完一起给

        下面开始android了关于android的扫码第三方开源的有挺多的,这里使用的是zing,他可以实现的挺多的二维码,条形码,生成二维码。。。

        建类库,导jar包,掉用,你们可以直接拿过这个类库去,然后自己改需要的样式。

        这个图是目录结构

        

201712050833586.jpg

        主要的就是mainactivity.java里边的调用了

        扫码成功之后的回掉:

[Java] 查看源文件 复制代码
@override
  protected void onactivityresult(int requestcode, int resultcode, intent data) {
    super.onactivityresult(requestcode, resultcode, data);
    // 扫描二维码/条码回传
    if (requestcode == request_code_scan && resultcode == result_ok) {
      if (data != null) {
        string content = data.getstringextra(constant.coded_content);
        result.settext("扫描结果为:" + content);
        /*执行网络请求*/
        string username = "dingchao";
        volleyscancodelogin(content, username);
        log.e("aaa","volleyscancodelogin。。。3");
      }
    }
  }

        volleyscancodelogin()方法:

[Java] 查看源文件 复制代码
/**
   * 网络请求
   * 使用volley进行网络请求
   *
   * @param content 携带的随机数和用户名
   * @param username 用户名
   */
  private void volleyscancodelogin(final string content, final string username) {
    log.e("aaa","volleyscancodelogin。。。1");
    final requestqueue mqueue = volley.newrequestqueue(mainactivity.this);
    stringrequest stringrequest = new stringrequest(request.method.post, "http://你自己的目录地址/webcodelogin/login.php", new response.listener<string>() {
      @override
      public void onresponse(string s) {
        log.e("aaa","volleyscancodelogin。。。2");
        toast.maketext(mainactivity.this, "" + s, toast.length_short).show();
      }
    }, new response.errorlistener() {
      @override
      public void onerrorresponse(volleyerror volleyerror) {

      }
    }) {
      @override
      protected map<string, string> getparams() throws authfailureerror {
        map<string, string> map = new hashmap<string, string>();
        map.put("act", "codecreate");
        map.put("username", username);
        map.put("randomnum", content);
        return map;
      }
    };
    mqueue.add(stringrequest);/*请求数据*/
  }



        

11

主题

9210

帖子

1002

安币

Android大神

Rank: 6Rank: 6

发表于 2018-3-13 23:08:56 | 显示全部楼层
感谢大神~

21

主题

9276

帖子

2063

安币

Android大神

Rank: 6Rank: 6

发表于 2018-3-14 21:57:13 | 显示全部楼层
感谢大神~

10

主题

9643

帖子

868

安币

代码手工艺人

Rank: 4

发表于 2018-3-16 04:41:13 | 显示全部楼层
感谢分享,楼主V5~

434

主题

911

帖子

490

安币

手工艺人

发表于 2018-3-17 10:24:42 | 显示全部楼层
楼主是好人,回个帖会有安币吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区

联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表