Android手机令牌教程
Android手机令牌教程
"沉下心,你不再是小孩子了.多看书,学做人"-JeffLi告诉自己
Written In The Font
花了一个天一夜,搞了这个小东西-安卓手机令牌.事实上,我这边分享,看网上东西也没多少.这就分享了.由于这个会给公司用.有些东西就不方便透露了.希望大家体谅.还有假设须要找我沟通,加群吧!在页面中会有三处出现.
Android手机令牌
- 界面
- java 与 C#服务端交互
- 倒计时和顺计时技术
- 口令生成
Content
android 也不难学,承认花了时间1/2 花在界面上.界面须要经验的积累.和大哥有说有笑搞着界面,我们浩二有木有.要吐槽的能够吐槽,要啥的说啥.
界面

代码:

<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:background="@drawable/my_bg"
android:gravity="center_horizontal"
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=".MainActivity" > <LinearLayout
android:id="@+id/activity_contact_li_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:layout_marginTop="10dp"
android:gravity="center"> <ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" /> <TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="***"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="40sp" />
</LinearLayout> <TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="14dp"
android:text="联系电话:" /> <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/textView5"
android:layout_alignLeft="@+id/textView5"
android:text="***有限公司 " /> <RelativeLayout
android:id="@+id/activity_contact_li_editphone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/btnOperatorRemark"
android:layout_alignLeft="@+id/btnTime"
android:layout_marginBottom="19dp"
android:background="@drawable/table_below_bg"
android:focusable="true"
android:gravity="center_vertical" > <LinearLayout
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:background="@drawable/table_below_bg"
android:focusable="true"
android:gravity="center_vertical" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10.0dip"
android:duplicateParentState="true"
android:text=" 序列号:"
android:textColor="@color/listitem_gray"
android:textSize="15sp"
android:textStyle="bold" /> <TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="14dip"
android:layout_marginRight="10.0dip"
android:layout_weight="1"
android:duplicateParentState="true"
android:textColor="@color/author_text"
android:textSize="14sp" />
</LinearLayout>
</RelativeLayout> <LinearLayout
android:id="@+id/activity_contact_li_mobilephone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/activity_contact_li_editphone"
android:layout_alignLeft="@+id/activity_contact_li_editphone"
android:background="@drawable/table_above_bg"
android:focusable="true"
android:gravity="center_vertical" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10.0dip"
android:duplicateParentState="true"
android:text="server时间:"
android:textColor="@color/listitem_gray"
android:textSize="15sp"
android:textStyle="bold" /> <TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="14dip"
android:layout_marginRight="10.0dip"
android:layout_weight="1"
android:duplicateParentState="true"
android:text=""
android:textColor="@color/author_text"
android:textSize="14sp" />
</LinearLayout> <Button
android:id="@+id/btnOperatorRemark"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_alignRight="@+id/activity_contact_li_editphone"
android:layout_alignTop="@+id/btnTime"
android:background="@drawable/login_btn_selector"
android:text="操作说明" /> <Button
android:id="@+id/btnTime"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_above="@+id/textView1"
android:layout_alignLeft="@+id/textView1"
android:layout_marginBottom="24dp"
android:background="@drawable/login_btn_selector"
android:text="时间校准"
android:textSize="18sp" /> <LinearLayout
android:id="@+id/activity_contact_li_mobilephone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_below="@+id/activity_contact_li_title"
android:background="@drawable/table_mid_bg"
android:focusable="true"
android:gravity="center_vertical" >
<TextView
android:id="@+id/number"
android:layout_width="match_parent"
android:layout_height="60dp"
android:duplicateParentState="true"
android:gravity="center"
android:text="123456"
android:textColor="@color/author_text"
android:textScaleX="1.2"
android:textSize="40sp" />
</LinearLayout> <LinearLayout
android:id="@+id/activity_contact_li_times"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/activity_contact_li_mobilephone"
android:layout_below="@+id/activity_contact_li_mobilephone"
android:layout_marginTop="17dp"
android:focusable="true"
android:gravity="center" > <TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:text=">> 口令 "
android:textColor="@color/listitem_blue" /> <TextView
android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/textView8"
android:text="22"
android:textColor="@color/red" /> <TextView
android:id="@+id/textView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text=" 秒后更新"
android:textColor="@color/listitem_blue" />
</LinearLayout> </RelativeLayout>

java 与 C#服务端交互
这样的东西 一抓一大把,我这边简单就用了下ksoap2-android-assembly-2.4-jar-with-dependencies.jar,发现交互非常easy,url call下然后 调用方法返回值.所以这边代码:

private String getDateTime() throws Exception {
// UIHelper.ToastMessage(MainActivity.this, "进去");
SoapObject rpc = new SoapObject(NAMESPACE, GET_TIME_METHOD_NAME);
AndroidHttpTransport ht = new AndroidHttpTransport(URL);
ht.debug = true;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.bodyOut = rpc;
envelope.dotNet = true;
envelope.setOutputSoapObject(rpc);
try {
ht.call(GET_TIME_SOAP_ACTION, envelope);
} catch (Exception e) {
// 校准时间网络错误
UIHelper.ToastMessage(MainActivity.this, "未连接网络或网络异常");
}
SoapObject result = (SoapObject) envelope.bodyIn;
SoapPrimitive detail = (SoapPrimitive) result
.getProperty("GetDateTimeResult");
System.out.println("result" + result);
System.out.println("detail" + detail);
// UIHelper.ToastMessage(MainActivity.this, detail.toString());
return detail.toString();
}

倒计时和顺计时技术
android端倒计时:

// 倒计时
Handler handler = new Handler() { public void handleMessage(Message msg) { // handle message
switch (msg.what) {
case 1:
recLen--; if (recLen < 10) {
txtTextTimeBack.setText("0" + recLen); }else{
txtTextTimeBack.setText("" + recLen); }if (recLen > 0) {
Message message = handler.obtainMessage(1);
handler.sendMessageDelayed(message, 1000); // send message
} else {
// 又一次获取序列号
Message message = handler.obtainMessage(1);
handler.sendMessageDelayed(message, 1000); // send message
String dateTime; try {
dateTime = DateFormate.getDateTime();
txtDateTime.setText(dateTime);
} catch (Exception e) {
UIHelper.ToastMessage(MainActivity.this, "未知错误");
e.printStackTrace();
} turnTimeBack(); try {
showTheNumber();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} super.handleMessage(msg);
}
};

顺时採用上面倒计时的方法里面,加起来合为60

String ss = DateFormate.getStringFromDate(DateFormate.getDateFormString(txtDateTime.getText().toString()));
if (recLen > 50)
{
ss += "0" + (60-recLen);
}
else {
ss += "" + (60-recLen);
}
txtDateTime.setText(ss);

口令生成
这是核心关键.所以我这边生成的算法就不方便透露了.像沟通的话,加我的群讨论.口令能够依据 序列号 时间 特定字符串生成.这边我提供下 有关算法,像MD5...等都是经常使用的

String key = String.valueOf((dateTimeLong ^ serialNumberLong));
String result = null;
MessageDigest mad5 =null;
try
{
mad5 = MessageDigest.getInstance("MD5");
}
catch (Exception e)
{
e.printStackTrace();
}

Editor's Note
加油 英语六级,仅仅有自己强大了,人家才会找你,更好的平台给你.
Android手机令牌教程的更多相关文章
- Android扫盲教程大全经典教程全分享
Android扫盲教程大全经典教程全分享,相当于android的简单用户手册下载路径 Android扫盲教程大全经典教程全分享.rar
- Android 游戏教程让人物动起来
在这里给大家分享Android游戏教程怎样让人物动起来,话不多说了,直接进入正题. 一. 准备工作 首先要准备好要使用的人物动作图和地形图.把它分割成16个不同的动作,循环播放同一行的4个不同 ...
- Android studio教程
Android studio教程: http://jingyan.baidu.com/season/44062
- Android开发教程大全介绍
Android是由谷歌在2007年推出的一个开放系统平台,主要针对移动设备市场,目前版本为Android 4.0.Android基于Linux,开发者可以使用Java或C/C++开发Android应用 ...
- ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView
原文地址: ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http:/ ...
- ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map
原文地址: ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NE ...
- ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置
原文地址: ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.c ...
- ArcGIS Runtime for Android开发教程V2.0(1)基本概念
原文地址: ArcGIS Runtime for Android开发教程V2.0(1)基本概念 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.csd ...
- Android精通教程-第一节Android入门简介
前言 大家好,给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease to be ...
随机推荐
- 从cellForRowAtIndexPath 看cell的重用机制
今天突然发现一个问题,由于对UITableViewCell 的重用机制不是很了解,让我纠结很久: 用过reloadData时候,会调用cellForRowAtIndexPath方法,但是请看以下2种c ...
- window 7 C盘整理
发现两篇不错的文章可以参考一下: http://blog.renren.com/blog/200083873/467545630 http://www.uedbox.com/win7-c-disk-s ...
- C++普通函数与模板函数以及特化函数重载的优先级问题
在面对C++模板的时候,需要十分注意,因为模板的复杂性有很多情况,所以最好学习模板的方法我个人认为就是用到就去学,用不到就尽量别去看各种奇门怪技,因为你就算看了,好不容易搞懂模板的实现内部了,包括元编 ...
- FLEX 网格布局及响应式处理
上一篇文章用Flex实现BorderLayout,这一章我们来实现常用的网格布局和响应式处理. 首先我们定义HTML结构,主Box为grid,每项为grid-cell,下面就是我们HTML代码结构. ...
- [javascript]event属性
1.clientX和clientY clientX和clientY是事件发生时,鼠标离浏览器可视文档区域左上角的位置 2.offsetX和offsetY offsetX和offsetY是事件发生时,鼠 ...
- python运维开发之第三天
一.第二天课程的复习总结 1.列表可以增删改查,元组是不可修改的列表,字符串是不可以修改的. 2.列表,元组是有序的,字典是无序的,字典的key唯一 3.列表字典可以嵌套列表,可以嵌套字典,可以嵌套多 ...
- Day5 双层装饰器、字符串格式化、生成器、迭代器、递归
双层装饰器实现用户登录和权限认证 #!/usr/bin/env python# -*- coding: utf-8 -*-# Author: WangHuafeng USER_INFO = {} de ...
- struts2中的路径问题
<?xml version="1.0" encoding="GB18030" ?><%@ page language="java&q ...
- listview底部增加按钮
View bottomView=getActivity().getLayoutInflater().inflate(R.layout.btn_my_course, null); myCourses = ...
- keil c编译器错误与解决方法
1. Warning 280:’i’:unreferenced local variable 说明局部变量i 在函数中未作任何的存取操作解决方法消除函数中i 变量的宣告 2 Warning 206:’ ...