安卓基于WifiScanner的签到APP

没图说个JB?首先上图:

      

 

 

友情提醒:后台数据库使用的是Bmob后端云

 

主要设计思路:首先选一个附近的wifi,输入签到码,进行签到。

       签到之后会启动一个后台线程每隔一段时间扫描附近wifi,检测扫描范围内,是否存在之前签到时选择的wifi。

       若不存在,那么就会往数据库塞一条中途离场信息。

 

 

这是工程的主要目录,包。

 

 

 

 

 

 

 

 

 

 

 

 

 

嗯对的,首先是AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.b140414.njupt.checkins">

    <!-- 允许联网 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 获取GSM(2g)、WCDMA(联通3g)等网络状态的信息 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 获取wifi网络状态的信息 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 保持CPU 运转,屏幕和键盘灯有可能是关闭的,用于文件上传和下载 -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <!-- 获取sd卡写的权限,用于文件上传和下载 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 允许读取手机状态 用于创建BmobInstallation -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/logo"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity" />
        <activity android:name=".Register" />

        <service android:name="service.WifiCheck_ch" />

        <activity android:name=".ScanActivity"></activity>
    </application>

</manifest>

 

登录界面:

activity_login.XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.b140414.njupt.checkins.LoginActivity"
    android:background="@drawable/background">
    <Button
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:text="登录"
        android:id="@+id/button_login"
        android:textSize="20dp"
        android:onClick="login_btn"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:background="#00000000"
        android:layout_above="@+id/button"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:id="@+id/button_re"
        android:textSize="15dp"
        android:background="@android:drawable/ic_menu_edit"
        android:onClick="register_btn"
        android:layout_alignTop="@+id/button"
        android:layout_alignParentStart="true" />

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/imageView"
        android:src="@drawable/logo"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <RelativeLayout
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:id="@+id/relativeLayout"
        android:layout_marginTop="62dp"
        android:layout_below="@+id/imageView"
        android:layout_centerHorizontal="true">

        <EditText
            android:layout_width="120dp"
            android:layout_height="30dp"
            android:id="@+id/account_et"
            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:textSize="15dp"
            android:background="@drawable/abc_textfield_search_material"
            android:phoneNumber="true"
            android:layout_alignParentTop="true"
            android:layout_toEndOf="@+id/imageView2" />

        <EditText
            android:layout_width="120dp"
            android:layout_height="30dp"
            android:id="@+id/password_et"
            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:textSize="15dp"
            android:background="@drawable/abc_textfield_search_material"
            android:password="true"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:layout_marginRight="30dp" />

        <ImageView
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:id="@+id/imageView2"
            android:background="@drawable/user"
            android:layout_marginRight="5dp"
            android:layout_alignBottom="@+id/account_et"
            android:layout_alignStart="@+id/imageView4" />

        <ImageView
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:id="@+id/imageView4"
            android:layout_alignBottom="@+id/password_et"
            android:layout_toStartOf="@+id/password_et"
            android:layout_marginRight="5dp"
            android:background="@drawable/lock" />
    </RelativeLayout>

    <Button
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:id="@+id/button"
        android:background="@android:drawable/ic_delete"
        android:textSize="15dp"
        android:onClick="quit_login_btn"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:layout_above="@+id/textView"
        android:layout_alignParentEnd="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="注册"
        android:id="@+id/textView"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true"
        android:textColor="@color/abc_primary_text_disable_only_material_dark" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="退出"
        android:id="@+id/textView4"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:textColor="@color/abc_primary_text_disable_only_material_dark" />

    <ImageView
        android:layout_width="100dp"
        android:layout_height="30dp"
        android:id="@+id/imageView6"
        android:layout_below="@+id/imageView"
        android:layout_centerHorizontal="true"
        android:src="@drawable/qiandao" />


    <RadioGroup
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/RadioGroup_type"
        android:orientation="horizontal"
        android:layout_below="@+id/relativeLayout"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="38dp">
        <RadioButton
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="学生"
            android:id="@+id/radioButton_s"
            android:checked="true"
            android:layout_marginTop="0dp"
            android:textColor="@color/abc_primary_text_disable_only_material_dark" />

        <RadioButton
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="老师"
            android:id="@+id/radioButton_t"
            android:checked="false"

            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:layout_marginTop="0dp" />
    </RadioGroup>

</RelativeLayout>

LoginActivity:

package com.b140414.njupt.checkins;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import bmob_table.User;
import java.util.List;

import cn.bmob.v3.Bmob;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.listener.FindListener;

public class LoginActivity extends AppCompatActivity {

    private EditText account_et;
    private EditText password_et;
    private RadioGroup radioGroup;
    private RadioButton radioButton_s,radioButton_t;
    private String userType = "s";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        Bmob.initialize(this, "502aa80df90be300b2af61b48838cc90");

        account_et=(EditText)findViewById(R.id.account_et);
        password_et=(EditText)findViewById(R.id.password_et);
        radioGroup = (RadioGroup)findViewById(R.id.RadioGroup_type);
        radioButton_s = (RadioButton)findViewById(R.id.radioButton_s);
        radioButton_t = (RadioButton)findViewById(R.id.radioButton_t);
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if(checkedId == radioButton_t.getId()){
                    userType = "t";
                }
                else {
                    if (checkedId == radioButton_s.getId()) {
                        userType = "s";
                    }
                    else {

                    }
                }


            }
        });
    }



    //登录按钮响应事件
    public void login_btn(View view){
        final String account=account_et.getText().toString();
        final String password=password_et.getText().toString();

        if(account.equals("")){
            Toast.makeText(LoginActivity.this, "请输入您的手机号!", Toast.LENGTH_LONG).show();
        }
        else if(password.equals("")){
            Toast.makeText(LoginActivity.this,"请输入您的密码!",Toast.LENGTH_LONG).show();
        }else {
            BmobQuery<User> query=new BmobQuery<>();
            query.addWhereEqualTo("account",account);
            query.findObjects(LoginActivity.this,new FindListener<User>() {
                @Override
                public void onSuccess(List<User> users) {
                    if(users.size()==0){
                        Toast.makeText(LoginActivity.this,"账户不存在!",Toast.LENGTH_LONG).show();
                        return;
                    }
                    for(User a:users){
                        if(!a.getPassword().equals(password)) {
                            Toast.makeText(LoginActivity.this, "账户或密码有误,请重新输入!", Toast.LENGTH_LONG).show();
                            return;
                        }

                        else{
                            if(userType.equals("t")) {
                                Intent intent = new Intent();
                                intent.setClass(LoginActivity.this, MainActivity.class);
                                intent.putExtra("account", account);
                                intent.putExtra("realName", a.getRealName());

                                startActivity(intent);
                            }
                            else {
                                if(userType.equals("s")){
                                    Intent intent = new Intent();
                                    intent.setClass(LoginActivity.this, ScanActivity.class);
                                    intent.putExtra("account", account);
                                    intent.putExtra("realName", a.getRealName());
                                    startActivity(intent);
                                }
                                else {
                                    Toast.makeText(LoginActivity.this, "请选择正确的用户类型", Toast.LENGTH_LONG).show();
                                }
                            }
                        }
                    }


                }

                @Override
                public void onError(int i, String s) {
                    Toast.makeText(LoginActivity.this,"登录失败",Toast.LENGTH_LONG).show();
                }
            });
        }
    }

    //注册按钮响应事件
    public void register_btn(View view) {
        Intent intent=new Intent();
        intent.setClass(LoginActivity.this,Register.class);
        startActivity(intent);
    }


    //退出按钮响应事件
    public void quit_login_btn(View view) {
        finish();
    }
}

 

 

注册界面:

activity_register.XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.b140414.njupt.checkins.Register"
    android:background="@drawable/background">


    <ImageView
        android:layout_width="100dp"
        android:layout_height="70dp"
        android:id="@+id/imageView3"
        android:src="@drawable/logo"
        android:layout_alignParentTop="true"
        android:layout_toStartOf="@+id/imageView7" />

    <Button
        android:layout_width="200dp"
        android:layout_height="60dp"
        android:text="注册"
        android:id="@+id/button_queding"
        android:background="@drawable/abc_ab_share_pack_mtrl_alpha"
        android:textSize="20dp"
        android:onClick="register_sure"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:layout_below="@+id/relativeLayout2"
        android:layout_marginTop="20dp"
        android:layout_alignEnd="@+id/relativeLayout2"
        android:layout_alignStart="@+id/relativeLayout2" />

    <Button
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:id="@+id/button_tuichu"
        android:background="@android:drawable/ic_menu_revert"
        android:textSize="20dp"
        android:onClick="register_quit_btn"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:layout_above="@+id/textView_back"
        android:layout_alignParentEnd="true" />

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="150dp"
        android:id="@+id/relativeLayout2"
        android:layout_marginTop="63dp"
        android:layout_below="@+id/imageView3"
        android:layout_centerHorizontal="true">

        <EditText
            android:layout_width="150dp"
            android:layout_height="25dp"
            android:id="@+id/register_account_et"
            android:background="@drawable/abc_textfield_search_material"
            android:phoneNumber="true"
            android:layout_marginLeft="10dp"
            android:layout_alignParentTop="true"
            android:layout_toEndOf="@+id/textView3"
            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:textSize="15dp" />

        <EditText
            android:layout_width="150dp"
            android:layout_height="25dp"
            android:id="@+id/register_password_et"
            android:background="@drawable/abc_textfield_search_material"
            android:password="true"
            android:layout_marginLeft="0dp"
            android:layout_below="@+id/register_account_et"
            android:layout_alignStart="@+id/register_account_et"
            android:layout_marginTop="10dp"
            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:textSize="15dp" />

        <EditText
            android:layout_width="150dp"
            android:layout_height="25dp"
            android:id="@+id/password_again_et"
            android:background="@drawable/abc_textfield_search_material"
            android:password="true"
            android:layout_marginLeft="0dp"
            android:layout_below="@+id/register_password_et"
            android:layout_alignStart="@+id/register_password_et"
            android:layout_marginTop="10dp"
            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:textSize="15dp" />

        <EditText
            android:layout_width="150dp"
            android:layout_height="25dp"
            android:id="@+id/realName_et"
            android:background="@drawable/abc_textfield_search_material"
            android:layout_marginLeft="0dp"
            android:layout_below="@+id/password_again_et"
            android:layout_alignStart="@+id/password_again_et"
            android:layout_marginTop="10dp"
            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:textSize="15dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="再输密码:"
            android:id="@+id/textView3"
            android:textSize="15dp"
            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:layout_marginLeft="0dp"
            android:layout_above="@+id/realName_et"
            android:layout_alignParentStart="true" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="姓名:"
            android:id="@+id/textView_x"
            android:textSize="15dp"
            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:layout_marginLeft="0dp"
            android:layout_alignBottom="@+id/realName_et"
            android:layout_alignParentStart="true" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密码:"
            android:id="@+id/textView_m"
            android:textSize="15dp"
            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:layout_marginLeft="0dp"
            android:layout_alignBottom="@+id/register_password_et"
            android:layout_alignParentStart="true" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="手机号:"
            android:id="@+id/textView_z"
            android:textSize="15dp"
            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:layout_marginLeft="0dp"
            android:layout_marginRight="5dp"
            android:layout_above="@+id/register_password_et"
            android:layout_alignParentStart="true" />
    </RelativeLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="返回"
        android:id="@+id/textView_back"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:layout_marginLeft="6dp"
        android:layout_alignParentBottom="true"
        android:layout_alignStart="@+id/button_tuichu" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView7"
        android:src="@drawable/signup"
        android:layout_alignBottom="@+id/imageView3"
        android:layout_alignEnd="@+id/relativeLayout2" />

</RelativeLayout>

Register:

package com.b140414.njupt.checkins;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import bmob_table.User;

import cn.bmob.v3.listener.SaveListener;

public class Register extends AppCompatActivity {

    private EditText register_account_et;
    private EditText register_password_et;
    private EditText password_again_et;
    private EditText realName_et;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        register_account_et= (EditText) findViewById(R.id.register_account_et);
        register_password_et=(EditText)findViewById(R.id.register_password_et);
        password_again_et=(EditText)findViewById(R.id.password_again_et);
        realName_et=(EditText)findViewById(R.id.realName_et);
    }

    public void register_sure(View view){
        String register_password=register_password_et.getText().toString();
        String password_again=password_again_et.getText().toString();
        String register_account=register_account_et.getText().toString();
        String realName=realName_et.getText().toString();

        if(!register_password.equals(password_again)){
            Toast.makeText(Register.this,"两次输入的密码不一致,请重新输入!",Toast.LENGTH_LONG).show();
        }
        else if(register_account.isEmpty()||register_account.length()!=11){
            Toast.makeText(Register.this,"输入手机号不合法,请重新输入!",Toast.LENGTH_LONG).show();
        }else if(realName.isEmpty()){
            Toast.makeText(Register.this,"请输入您的真实姓名!",Toast.LENGTH_LONG).show();
        }else{
            User user=new User();
            user.setAccount(register_account);
            user.setPassword(password_again);
            user.setRealName(realName);

            user.save(Register.this,new SaveListener() {
                @Override
                public void onSuccess() {
                    Toast.makeText(Register.this,"注册成功,请返回登录!",Toast.LENGTH_LONG).show();
                }

                @Override
                public void onFailure(int i, String s) {
                    Toast.makeText(Register.this,"注册失败,请重试!",Toast.LENGTH_LONG).show();
                }
            });
        }





    }

    public void register_quit_btn(View view){
        finish();
    }
}

 学生界面:

activity_scan.XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.b140414.njupt.checkins.ScanActivity"
    android:background="@drawable/background">

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="120dp"
        android:id="@+id/listView"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:text="刷新"
        android:id="@+id/button3"
        android:onClick="netScan"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:background="@drawable/circle"
        android:layout_below="@+id/listView"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="请选择一个wifi"
        android:id="@+id/textView_choice"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:layout_below="@+id/Wifi_name"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="100dp"
        android:layout_height="40dp"
        android:text="签到"
        android:id="@+id/Scan_check"
        android:onClick="Scan_Dao"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:background="@drawable/circle"
        android:layout_alignTop="@+id/button_scaninfo"
        android:layout_toStartOf="@+id/Wifi_name" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:id="@+id/Wifi_name"
        android:layout_below="@+id/button3"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="100dp"
        android:textColor="@color/abc_primary_text_disable_only_material_dark" />

    <Button
        android:layout_width="100dp"
        android:layout_height="40dp"
        android:text="签退并退出"
        android:id="@+id/button_scanquit"
        android:onClick="Scanquit"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:background="@drawable/circle"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="100dp"
        android:layout_height="40dp"
        android:text="本人记录"
        android:id="@+id/button_scaninfo"
        android:onClick="Info_ScanDao"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:background="@drawable/circle"
        android:layout_marginTop="27dp"
        android:layout_below="@+id/textView_choice"
        android:layout_alignStart="@+id/Wifi_name" />

    <EditText
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:id="@+id/editText_s_key"
        android:background="@drawable/abc_textfield_search_material"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:layout_below="@+id/textView7"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="签到口令"
        android:id="@+id/textView7"
        android:textSize="20dp"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:layout_below="@+id/button3"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp" />
</RelativeLayout>


 ScanActivity:

package com.b140414.njupt.checkins;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import bmob_table.User;

import cn.bmob.v3.listener.SaveListener;

public class Register extends AppCompatActivity {

    private EditText register_account_et;
    private EditText register_password_et;
    private EditText password_again_et;
    private EditText realName_et;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        register_account_et= (EditText) findViewById(R.id.register_account_et);
        register_password_et=(EditText)findViewById(R.id.register_password_et);
        password_again_et=(EditText)findViewById(R.id.password_again_et);
        realName_et=(EditText)findViewById(R.id.realName_et);
    }

    public void register_sure(View view){
        String register_password=register_password_et.getText().toString();
        String password_again=password_again_et.getText().toString();
        String register_account=register_account_et.getText().toString();
        String realName=realName_et.getText().toString();

        if(!register_password.equals(password_again)){
            Toast.makeText(Register.this,"两次输入的密码不一致,请重新输入!",Toast.LENGTH_LONG).show();
        }
        else if(register_account.isEmpty()||register_account.length()!=11){
            Toast.makeText(Register.this,"输入手机号不合法,请重新输入!",Toast.LENGTH_LONG).show();
        }else if(realName.isEmpty()){
            Toast.makeText(Register.this,"请输入您的真实姓名!",Toast.LENGTH_LONG).show();
        }else{
            User user=new User();
            user.setAccount(register_account);
            user.setPassword(password_again);
            user.setRealName(realName);

            user.save(Register.this,new SaveListener() {
                @Override
                public void onSuccess() {
                    Toast.makeText(Register.this,"注册成功,请返回登录!",Toast.LENGTH_LONG).show();
                }

                @Override
                public void onFailure(int i, String s) {
                    Toast.makeText(Register.this,"注册失败,请重试!",Toast.LENGTH_LONG).show();
                }
            });
        }





    }

    public void register_quit_btn(View view){
        finish();
    }
}

教师界面:

activity_main.XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.b140414.njupt.checkins.MainActivity"
    android:background="@drawable/background">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="欢迎使用"
        android:id="@+id/textView_title"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:textSize="20dp"
        android:textColor="@color/abc_primary_text_disable_only_material_dark" />

    <Button
        android:layout_width="150dp"
        android:layout_height="40dp"
        android:text="退出"
        android:id="@+id/button_tui"
        android:background="@drawable/circle"
        android:textSize="15dp"
        android:onClick="Quit"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:layout_marginBottom="47dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/hello"
        android:textSize="15dp"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="40dp"
        android:layout_below="@+id/textView_title"
        android:layout_alignParentStart="true" />

    <RelativeLayout
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:id="@+id/relativeLayout3"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="135dp">

        <Button
            android:layout_width="100dp"
            android:layout_height="30dp"
            android:text="离场信息"
            android:id="@+id/button_li"
            android:background="@drawable/circle"
            android:textSize="15dp"
            android:onClick="LiChang"
            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true" />

        <Button
            android:layout_width="100dp"
            android:layout_height="30dp"
            android:text="点名"
            android:id="@+id/button_call"
            android:background="@drawable/circle"
            android:textSize="15dp"
            android:onClick="call"
            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:layout_alignParentBottom="true"
            android:layout_alignParentStart="true" />

        <EditText
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:id="@+id/editText_key"
            android:background="@drawable/abc_textfield_search_material"
            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:layout_below="@+id/textView6"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="10dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="签到口令"
            android:id="@+id/textView6"
            android:textSize="20dp"
            android:textColor="@color/abc_primary_text_disable_only_material_dark"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true" />
    </RelativeLayout>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView5"
        android:src="@drawable/qiandao"
        android:layout_marginLeft="-20dp"
        android:layout_above="@+id/hello"
        android:layout_toEndOf="@+id/textView_title" />

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="120dp"
        android:id="@+id/listView2"
        android:layout_below="@+id/hello" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:text="刷新"
        android:id="@+id/button2"
        android:onClick="netScan_t"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:background="@drawable/circle"
        android:layout_below="@+id/listView2"
        android:layout_alignParentStart="true"
        android:layout_marginTop="20dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="请选择一个wifi"
        android:id="@+id/textView_BSSID"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:layout_alignBottom="@+id/button2"
        android:layout_alignEnd="@+id/listView2" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:id="@+id/textView_SSID"
        android:textColor="@color/abc_primary_text_disable_only_material_dark"
        android:layout_above="@+id/textView_BSSID"
        android:layout_toEndOf="@+id/relativeLayout3"
        android:layout_marginStart="11dp" />

</RelativeLayout>

MainActivity:

package com.b140414.njupt.checkins;

import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import bmob_table.Leave_table;
import bmob_table.ScanCheck;
import service.WifiCheck_ch;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.listener.FindListener;

public class MainActivity extends AppCompatActivity {

    private TextView hello;
    public static String BSSID;
    public String realName ;
    public String account ;
    private List<Leave_table> leave_half = new ArrayList<Leave_table>();
    private Intent bindIntent;
    private WifiManager wifiManager;
    private ListView listView;
    private  TextView textview_choice;
    private  TextView textview_wifiname;
    private  String Key;
    private EditText editText_key;

    TextView text1;
    TextView text2;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        hello = (TextView) findViewById(R.id.hello);
        Intent intent = getIntent();
        Bundle bundle = intent.getExtras();
        realName = bundle.getString("realName");
        account = bundle.getString("account");
        hello.setText("你好," + realName);
        //BindService传入账号与姓名信息
        bindIntent = new Intent(MainActivity.this,WifiCheck_ch.class);
        bindIntent.putExtra("account",account);
        bindIntent.putExtra("name",realName);
        listView = (ListView)findViewById(R.id.listView2);
        textview_choice = (TextView)findViewById(R.id.textView_BSSID);
        textview_wifiname = (TextView)findViewById(R.id.textView_SSID);
        editText_key = (EditText)findViewById(R.id.editText_key);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> l, View v, int position,long id) {
                text1=(TextView)v.findViewById(R.id.BSSID);
                text2=(TextView)v.findViewById(R.id.SSID);
                BSSID = text1.getText().toString();
                textview_choice.setText(BSSID);
                textview_wifiname.setText(text2.getText().toString());
            }
        });

        wifiManager =  (WifiManager)getSystemService(Context.WIFI_SERVICE);

    }



    //获取MAC
    public String getLocalMacAddress() {
        WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        WifiInfo info = wifi.getConnectionInfo();
        return info.getMacAddress();
    }


    //获取链接的wifi的MAC地址
    public String getLinkMacAddress() {
        WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        WifiInfo info = wifi.getConnectionInfo();
        return info.getBSSID();
    }


    //点名按钮事件
    public void call(View view){
        BmobQuery<ScanCheck> query1 = new BmobQuery<>();
        BmobQuery<ScanCheck> query2 = new BmobQuery<>();
        BmobQuery<ScanCheck> query3 = new BmobQuery<>();
        Key = editText_key.getText().toString();
        //获取当前时间
        Date todaydate=new Date();
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
        final String s = format.format(todaydate);
        //当前时间与check_table表中的签到时间进行匹配
            //query1.addWhereEqualTo("DaoTime", s);
            query2.addWhereEqualTo("BSSID", BSSID);
            query3.addWhereEqualTo("Key",Key);
            List<BmobQuery<ScanCheck>> andQuerys = new ArrayList<BmobQuery<ScanCheck>>();
            andQuerys.add(query1);
            andQuerys.add(query2);
            andQuerys.add(query3);
            BmobQuery<ScanCheck> query_and = new BmobQuery<>();
            query_and.and(andQuerys);
            query_and.findObjects(MainActivity.this, new FindListener<ScanCheck>() {
                @Override
                public void onSuccess(List<ScanCheck> qianDao) {

                    String str = "";
                    for (ScanCheck a : qianDao) {
                        str += a.getRealName() + "\n\n";
                    }
                    String str1 = "查询成功:共" + qianDao.size() + "个人签到。";
                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                    builder.setTitle(s +"\n"+ Key + "的签到人员详情");
                    builder.setMessage(str + str1);
                    builder.create().show();
                }

                @Override
                public void onError(int i, String s) {
                    Toast.makeText(MainActivity.this, "查询失败!" + s, Toast.LENGTH_LONG);
                }
            });

    }

    //查看离场信息
    public void LiChang(View view) {
        BmobQuery<Leave_table> query2 = new BmobQuery<>();
        BmobQuery<Leave_table> query1 = new BmobQuery<>();
        //获取当前时间
        Date todaydate = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String s = format.format(todaydate);
        //当前时间与leave_table表中的leavetype+时间 && BSSID 进行匹配
        query2.addWhereEqualTo("LeaveType", "中途离场"+s);
        query1.addWhereEqualTo("BSSID", BSSID);

        List<BmobQuery<Leave_table>> andQuerys = new ArrayList<BmobQuery<Leave_table>>();
        andQuerys.add(query1);
        andQuerys.add(query2);
        BmobQuery<Leave_table> query_and = new BmobQuery<>();
        query_and.and(andQuerys);
        query_and.findObjects(MainActivity.this, new FindListener<Leave_table>() {
            @Override
            public void onSuccess(List<Leave_table> leave) {
                String str = "";
                for (Leave_table sjk : leave) {
                    Boolean hasName = false;
                    for(Leave_table bd : leave_half){
                        if(sjk.getRealName().equals(bd.getRealName())) {
                            hasName = true;
                            break;
                        }
                    }
                    if(!hasName){
                        leave_half.add(sjk);
                    }

                }
                for (Leave_table a : leave_half) {
                    str += a.getRealName() + "\n\n";
                }
                String str1 = "查询成功:共" + leave_half.size() + "个人中途离场。";
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                Date todaydate = new Date();
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                String s = format.format(todaydate);
                builder.setTitle(s + "的中途离场人员详情");
                builder.setMessage(str + str1);
                builder.create().show();
            }

            @Override
            public void onError(int i, String s) {
                Toast.makeText(MainActivity.this, "查询失败!" + s, Toast.LENGTH_LONG);
            }
        });
    }

    public void Quit(View view) {
        finish();
    }
    public void netScan_t(View v){
        List<Map<String, Object>> list;
        //启动扫描
        wifiManager.startScan();

        //获取扫描结果
        list = getListForSimpleAdapter();

        SimpleAdapter adapter = new SimpleAdapter(this, list,
                R.layout.wifiinfo,
                new String[] { "SSID", "BSSID" },
                new int[] { R.id.SSID,R.id.BSSID });


        listView.setAdapter(adapter);

    }

    private List<Map<String, Object>> getListForSimpleAdapter() {
        List<ScanResult> mData= wifiManager.getScanResults();
        List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();

        for (ScanResult a : mData) {
            Map<String, Object> map = new HashMap<String, Object>();
            map = new HashMap<String, Object>();
            map.put("SSID", a.SSID);
            map.put("BSSID", a.BSSID);

            list.add(map);
        }
        return list;
    }
}

 

 

至于界面的图片啊啥的,可以去git上下载我的整个工程来获取:https://github.com/ZzzSimon/Checkins

未完待续……

转载于:https://www.cnblogs.com/yaoyunxiaoli/p/6220909.html

本系统旨在基于移动设备WIFI环境下解决学生签到,教师查询考勤记录,发布公告等问题。本课题研究成果如下: (1)通过调查研究发现便捷,低成本的移动设备主要趋向于安卓智能设备。尽管Apple iPhone 系列吸引了广大用的眼球,但是Google安卓系统的智能手机却一直是国内市场的“主力军”。【1】【通信信息报/2012年/4月/18日/第B04 玩转终端 安卓独占中国市场七成份额 中低端手机加速规模扩张】同时Apple 手机成本相对较高,在普通高校学生使用率较低。本系统采用开发安卓的客户端简单APP应用调用安卓设备的底层硬件功能,安卓APP通过HTTP 协议、Web Services与服务器ASP.NET网站数据资源进行交互。 (2)安卓移动设备在连接上WIFI时可以通过安卓系统WIFI Manager类管理WIFI状态,获得设备的物理地址,通过这一物理地址作为与学生学号绑定的条件,解决学生代签漏签问题。 (3)开发出教师使用端,主要功能是释放WIFI信号,发布公告,查询学生的签到情况等功能。WIFI热点释放功能依赖于Java反射机制,逆向解析并调用WIFI Manager类中的方法去实现热点的打开、关闭和状态管理。【2使用Java反射机制逆向分析类方法之间的关系DOI:10.16184/j.cnki.comprg.2016.19.006 分类号:TP312.2】 (4)开发web服务端实现管理员对教师、课程、专业、及学生等基本信息的管理功能。
Wifi无线网络扫描管理软件 Using WiFi Scanner you’ll see nearby wireless access points and their details, including channels, signal levels (RSSI), noise, channel width, and MAC address, signal quality, maximum data rate, encryption, and much more. Also includes upload and download speed testing to quickly measure and analyze WiFi Internet performance problems Simple, fast wireless network discovery of 802.11 a/b/g/n/ac access points. WiFi Scanner is great for determining the best position for an access point at home or in the office. After selecting the best position, the optimal channel to use can be determined by selecting the least used channel resulting in improved WiFi speeds. Key Features Simple, fast wireless network discovery of 802.11 a/b/g/n/ac access points. Connect to detected networks using join button Full support for both 2.4 and 5 GHz networks Support for all channel bandwidths (20, 40, 80, and 160 MHz) Display detailed wireless network parameters: network name (SSID), signal level (RSSI), MAC address (BSSID), signal quality, channel, maximum data rate, encryption, etc. Display changes in signal level over time in graphical form. Filter list of detected wireless networks by specified parameters (SSID/network name, channel, channel band, signal strength) Display wireless connection statistics in the form of graphs and tables. Give each access point a custom label Export results to comma separated value (CSV) files Generate summary reports in HTML format WiFi Speed Testing Upload and download WiFi speed testing Use speed testing feature to troubleshoot WiFi networks Auto run speed test when client roams to different access point Auto repeat speed test with wait time between tests "Who's On My Network" (IP Scanner) Fast IP scanner that detects unknown devices connected to your WiFi network. Detects hostnames, determines the MAC address, and in some cases can auto-detect device type (phone, laptop, router, etc). Configured icon for discovered devices is saved for future scans. Scanning results can be saved to CSV file via menu export option. Great for finding WiFi "Piggybackers". Advanced Features (supported by some access points) Display access point name if configured by network administrator Display number of devices connected to each access point Display channel utilization Display if 802.11r is enabled and type
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值