diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..afbdab3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..d5c4f0d --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +QianDao \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..217af47 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,23 @@ + + + + + + diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..e206d70 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..6ad8586 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + + diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..59436c9 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..71580dc --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml new file mode 100644 index 0000000..922003b --- /dev/null +++ b/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..def6a6a --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/QianDao.iml b/QianDao.iml new file mode 100644 index 0000000..2a02201 --- /dev/null +++ b/QianDao.iml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/app.iml b/app/app.iml new file mode 100644 index 0000000..ef90a2a --- /dev/null +++ b/app/app.iml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..1145f4e --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,31 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 21 + buildToolsVersion "21.1.2" + + defaultConfig { + applicationId "com.jkxqj.qiandao" + minSdkVersion 15 + targetSdkVersion 21 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + compile 'com.android.support:appcompat-v7:21.0.3' + compile 'com.android.support:support-annotations:21.0.3' + compile 'com.android.support:support-v4:21.0.3' + compile files('libs/Bmob_Push_V0.6beta_20150408.jar') + compile files('libs/android-support-v4.jar') + compile files('libs/BmobSDK_V3.4.2_0727.jar') + compile files('libs/filechoose.jar') +} diff --git a/app/libs/BmobSDK_V3.4.2_0727.jar b/app/libs/BmobSDK_V3.4.2_0727.jar new file mode 100644 index 0000000..b0a04dc Binary files /dev/null and b/app/libs/BmobSDK_V3.4.2_0727.jar differ diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..73e84d9 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in D:\androidSDK\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/app/src/androidTest/java/com/jkxqj/qiandao/ApplicationTest.java b/app/src/androidTest/java/com/jkxqj/qiandao/ApplicationTest.java new file mode 100644 index 0000000..6c1427a --- /dev/null +++ b/app/src/androidTest/java/com/jkxqj/qiandao/ApplicationTest.java @@ -0,0 +1,13 @@ +package com.jkxqj.qiandao; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..42ec3e9 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/jkxqj/qiandao/UIController/LoginActivity.java b/app/src/main/java/com/jkxqj/qiandao/UIController/LoginActivity.java new file mode 100644 index 0000000..59dbcd8 --- /dev/null +++ b/app/src/main/java/com/jkxqj/qiandao/UIController/LoginActivity.java @@ -0,0 +1,89 @@ +package com.jkxqj.qiandao.UIController; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.EditText; +import android.widget.Toast; +import com.jkxqj.qiandao.R; +import com.jkxqj.qiandao.model.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 Activity { + + private EditText account_et; + private EditText password_et; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_login); + Bmob.initialize(this, "6e5d0ddd2563ca046cad551add73243e"); + account_et=(EditText)findViewById(R.id.account_et); + password_et=(EditText)findViewById(R.id.password_et); + } + + + //登录按钮响应事件 + 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 query=new BmobQuery<>(); + query.addWhereEqualTo("account",account); + query.findObjects(LoginActivity.this,new FindListener() { + @Override + public void onSuccess(List 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{ + Intent intent =new Intent(); + intent.setClass(LoginActivity.this,MainActivity.class); + intent.putExtra("account",account); + intent.putExtra("realName",a.getRealName()); + startActivity(intent); + } + } + + + } + + @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,RegisterActivity.class); + startActivity(intent); + } + + + //退出按钮响应事件 + public void quit_login_btn(View view) { + finish(); + } + +} diff --git a/app/src/main/java/com/jkxqj/qiandao/UIController/MainActivity.java b/app/src/main/java/com/jkxqj/qiandao/UIController/MainActivity.java new file mode 100644 index 0000000..135cf78 --- /dev/null +++ b/app/src/main/java/com/jkxqj/qiandao/UIController/MainActivity.java @@ -0,0 +1,217 @@ +package com.jkxqj.qiandao.UIController; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.Intent; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; +import com.jkxqj.qiandao.R; +import com.jkxqj.qiandao.model.QianDao; +import com.jkxqj.qiandao.model.QianTui; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Enumeration; +import java.util.List; + +import cn.bmob.v3.BmobQuery; +import cn.bmob.v3.listener.FindListener; +import cn.bmob.v3.listener.SaveListener; + +public class MainActivity extends Activity { + + private TextView hello; + public static String IP; + public static String MAC; + + + @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(); + String realName = bundle.getString("realName"); + + hello.setText("你好," + realName); + } + + //检查连接的是什么网络 + public Integer checkWifi(Context context) { + ConnectivityManager ConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo mNetworkInfo = ConnectivityManager.getActiveNetworkInfo(); + if (mNetworkInfo.getState() == NetworkInfo.State.CONNECTED) { + if (mNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) { + return 1; //返回1,连接的是移动网络 + } else if (mNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) { + return 2; //返回2,连接的是wifi + } + } else { + return 3; //返回3,没有连接。 + } + return 3; + } +//获取IP + public String getLocalIpAddress() { + try { + for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) { + NetworkInterface intf = en.nextElement(); + for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) { + InetAddress inetAddress = enumIpAddr.nextElement(); + if (!inetAddress.isLoopbackAddress()) { + return inetAddress.getHostAddress().toString(); + } + } + } + } catch (SocketException ex) { + Log.e("IP 地址为:", ex.toString()); + } + return null; + } +//获取MAC + public String getLocalMacAddress() { + WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); + WifiInfo info = wifi.getConnectionInfo(); + return info.getMacAddress(); + } + + public void Dao(View view) { + if (checkWifi(MainActivity.this) == 1) { + Toast.makeText(MainActivity.this, "您连接的是移动网络,签到失败!", Toast.LENGTH_LONG).show(); + } else if (checkWifi(MainActivity.this) == 3) { + Toast.makeText(MainActivity.this, "您没有连接网络,签到失败!", Toast.LENGTH_LONG).show(); + } else if (checkWifi(MainActivity.this) == 2) { + MAC=getLocalMacAddress(); + IP=getLocalIpAddress(); + Date date=new Date(); + SimpleDateFormat sdf=new SimpleDateFormat("yy/MM/dd HH:mm:ss"); + final String stime=sdf.format(date); + Intent intent = getIntent(); + Bundle bundle = intent.getExtras(); + String realName = bundle.getString("realName"); + String account = bundle.getString("account"); + + QianDao qiandao=new QianDao(); + qiandao.setAccount(account); + qiandao.setRealName(realName); + qiandao.setDaoTime(stime); + qiandao.setIP(IP); + qiandao.setMAC(MAC); + qiandao.save(MainActivity.this, new SaveListener(){ + @Override + public void onSuccess() { + Toast.makeText(MainActivity.this, "签到成功!\n IP:"+IP+"\nMAC 地址:"+MAC+"\n时间:"+ stime, Toast.LENGTH_LONG).show(); + } + @Override + public void onFailure(int code, String arg0) { + Toast.makeText(MainActivity.this, "签到失败!", Toast.LENGTH_LONG).show(); + } + }); + } + } + + public void Tui(View view) { + if (checkWifi(MainActivity.this) == 1) { + Toast.makeText(MainActivity.this, "您连接的是移动网络,签退失败!", Toast.LENGTH_LONG).show(); + } else if (checkWifi(MainActivity.this) == 3) { + Toast.makeText(MainActivity.this, "您没有连接网络,签退失败!", Toast.LENGTH_LONG).show(); + } else if (checkWifi(MainActivity.this) == 2) { + MAC=getLocalMacAddress(); + IP=getLocalIpAddress(); + Date date=new Date(); + SimpleDateFormat sdf=new SimpleDateFormat("yy/MM/dd HH:mm:ss"); + final String ttime=sdf.format(date); + Intent intent = getIntent(); + Bundle bundle = intent.getExtras(); + String realName = bundle.getString("realName"); + String account = bundle.getString("account"); + + QianTui qiantui=new QianTui(); + qiantui.setAccount(account); + qiantui.setRealName(realName); + qiantui.setTuiTime(ttime); + qiantui.setIP(IP); + qiantui.setMAC(MAC); + qiantui.save(MainActivity.this, new SaveListener(){ + @Override + public void onSuccess() { + Toast.makeText(MainActivity.this, "签退成功!\n IP:"+IP+"\nMAC 地址:"+MAC+"\n时间:"+ttime, Toast.LENGTH_LONG).show(); + } + @Override + public void onFailure(int code, String arg0) { + Toast.makeText(MainActivity.this, "签退失败!", Toast.LENGTH_LONG).show(); + } + }); + + } + } + + public void Info_Dao(View view) { + Intent intent = getIntent(); + Bundle bundle = intent.getExtras(); + String account = bundle.getString("account"); + BmobQuery query=new BmobQuery<>(); + query.addWhereEqualTo("account",account); + query.findObjects(MainActivity.this,new FindListener() { + @Override + public void onSuccess(List qianDaos) { + + String str=""; + for(QianDao a:qianDaos){ + str+="时间:"+a.getDaoTime()+"\nMAC:"+a.getMAC()+"\nIP:"+a.getIP()+"\n\n"; + } + AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this); + builder.setTitle("签到详情"); + builder.setMessage(str); + builder.create().show(); + } + + @Override + public void onError(int i, String s) { + Toast.makeText(MainActivity.this,"查询失败!"+s,Toast.LENGTH_LONG); + } + }); + } + + public void Info_Tui(View view) { + Intent intent = getIntent(); + Bundle bundle = intent.getExtras(); + String account = bundle.getString("account"); + BmobQuery query=new BmobQuery<>(); + query.addWhereEqualTo("account",account); + query.findObjects(MainActivity.this,new FindListener() { + @Override + public void onSuccess(List QianTuis) { + String str=""; + for(QianTui a:QianTuis){ + str+="时间:"+a.getTuiTime()+"\nMAC:"+a.getMAC()+"\nIP:"+a.getIP()+"\n\n"; + } + AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this); + builder.setTitle("签退详情"); + builder.setMessage(str); + 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(); + } + +} diff --git a/app/src/main/java/com/jkxqj/qiandao/UIController/RegisterActivity.java b/app/src/main/java/com/jkxqj/qiandao/UIController/RegisterActivity.java new file mode 100644 index 0000000..61e0a8d --- /dev/null +++ b/app/src/main/java/com/jkxqj/qiandao/UIController/RegisterActivity.java @@ -0,0 +1,78 @@ +package com.jkxqj.qiandao.UIController; + +import android.app.Activity; +import android.support.v7.app.ActionBarActivity; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.EditText; +import android.widget.Toast; + +import com.jkxqj.qiandao.R; +import com.jkxqj.qiandao.model.User; + +import cn.bmob.v3.listener.SaveListener; + + +public class RegisterActivity extends Activity { + 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(RegisterActivity.this,"两次输入的密码不一致,请重新输入!",Toast.LENGTH_LONG).show(); + } + else if(register_account.isEmpty()||register_account.length()!=11){ + Toast.makeText(RegisterActivity.this,"输入手机号不合法,请重新输入!",Toast.LENGTH_LONG).show(); + }else if(realName.isEmpty()){ + Toast.makeText(RegisterActivity.this,"请输入您的真实姓名!",Toast.LENGTH_LONG).show(); + }else{ + User user=new User(); + user.setAccount(register_account); + user.setPassword(password_again); + user.setRealName(realName); + + user.save(RegisterActivity.this,new SaveListener() { + @Override + public void onSuccess() { + Toast.makeText(RegisterActivity.this,"注册成功,请返回登录!",Toast.LENGTH_LONG).show(); + } + + @Override + public void onFailure(int i, String s) { + Toast.makeText(RegisterActivity.this,"注册失败,请重试!",Toast.LENGTH_LONG).show(); + } + }); + } + + + + + + } + + public void register_quit_btn(View view){ + finish(); + } + + + + +} diff --git a/app/src/main/java/com/jkxqj/qiandao/model/QianDao.java b/app/src/main/java/com/jkxqj/qiandao/model/QianDao.java new file mode 100644 index 0000000..28aba1e --- /dev/null +++ b/app/src/main/java/com/jkxqj/qiandao/model/QianDao.java @@ -0,0 +1,66 @@ +package com.jkxqj.qiandao.model; + +import cn.bmob.v3.BmobObject; + +/** + * Created by JKXQJ on 2015/8/1. + */ +public class QianDao extends BmobObject { + + private String id; + private String account; + private String realName; + private String IP; + private String MAC; + private String DaoTime; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + + public String getIP() { + return IP; + } + + public void setIP(String IP) { + this.IP = IP; + } + + public String getMAC() { + return MAC; + } + + public void setMAC(String MAC) { + this.MAC = MAC; + } + + public String getDaoTime() { + return DaoTime; + } + + public void setDaoTime(String daoTime) { + DaoTime = daoTime; + } + + +} diff --git a/app/src/main/java/com/jkxqj/qiandao/model/QianTui.java b/app/src/main/java/com/jkxqj/qiandao/model/QianTui.java new file mode 100644 index 0000000..aa898af --- /dev/null +++ b/app/src/main/java/com/jkxqj/qiandao/model/QianTui.java @@ -0,0 +1,65 @@ +package com.jkxqj.qiandao.model; + +import cn.bmob.v3.BmobObject; + +/** + * Created by JKXQJ on 2015/8/1. + */ +public class QianTui extends BmobObject { + private String id; + private String account; + private String realName; + private String IP; + private String MAC; + private String TuiTime; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + + public String getIP() { + return IP; + } + + public void setIP(String IP) { + this.IP = IP; + } + + public String getMAC() { + return MAC; + } + + public void setMAC(String MAC) { + this.MAC = MAC; + } + + public String getTuiTime() { + return TuiTime; + } + + public void setTuiTime(String tuiTime) { + TuiTime = tuiTime; + } + + +} diff --git a/app/src/main/java/com/jkxqj/qiandao/model/User.java b/app/src/main/java/com/jkxqj/qiandao/model/User.java new file mode 100644 index 0000000..b061d75 --- /dev/null +++ b/app/src/main/java/com/jkxqj/qiandao/model/User.java @@ -0,0 +1,36 @@ +package com.jkxqj.qiandao.model; + +import cn.bmob.v3.BmobObject; + +/** + * Created by JKXQJ on 2015/8/1. + */ +public class User extends BmobObject { + private String account; + private String password; + private String realName; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } +} diff --git a/app/src/main/res/drawable-hdpi/ic_launcher.png b/app/src/main/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000..96a442e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_launcher.png b/app/src/main/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 0000000..359047d Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_launcher.png b/app/src/main/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 0000000..71c6d76 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_launcher.png b/app/src/main/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..4df1894 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000..66a25c1 --- /dev/null +++ b/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,59 @@ + + + + + + +