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手机令牌教程的更多相关文章

  1. Android扫盲教程大全经典教程全分享

    Android扫盲教程大全经典教程全分享,相当于android的简单用户手册下载路径 Android扫盲教程大全经典教程全分享.rar

  2. Android 游戏教程让人物动起来

    在这里给大家分享Android游戏教程怎样让人物动起来,话不多说了,直接进入正题. 一. 准备工作     首先要准备好要使用的人物动作图和地形图.把它分割成16个不同的动作,循环播放同一行的4个不同 ...

  3. Android studio教程

    Android studio教程: http://jingyan.baidu.com/season/44062

  4. Android开发教程大全介绍

    Android是由谷歌在2007年推出的一个开放系统平台,主要针对移动设备市场,目前版本为Android 4.0.Android基于Linux,开发者可以使用Java或C/C++开发Android应用 ...

  5. ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView

    原文地址: ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http:/ ...

  6. ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map

    原文地址: ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NE ...

  7. ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置

    原文地址: ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.c ...

  8. ArcGIS Runtime for Android开发教程V2.0(1)基本概念

    原文地址: ArcGIS Runtime for Android开发教程V2.0(1)基本概念 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.csd ...

  9. Android精通教程-第一节Android入门简介

    前言 大家好,给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease to be ...

随机推荐

  1. 从cellForRowAtIndexPath 看cell的重用机制

    今天突然发现一个问题,由于对UITableViewCell 的重用机制不是很了解,让我纠结很久: 用过reloadData时候,会调用cellForRowAtIndexPath方法,但是请看以下2种c ...

  2. window 7 C盘整理

    发现两篇不错的文章可以参考一下: http://blog.renren.com/blog/200083873/467545630 http://www.uedbox.com/win7-c-disk-s ...

  3. C++普通函数与模板函数以及特化函数重载的优先级问题

    在面对C++模板的时候,需要十分注意,因为模板的复杂性有很多情况,所以最好学习模板的方法我个人认为就是用到就去学,用不到就尽量别去看各种奇门怪技,因为你就算看了,好不容易搞懂模板的实现内部了,包括元编 ...

  4. FLEX 网格布局及响应式处理

    上一篇文章用Flex实现BorderLayout,这一章我们来实现常用的网格布局和响应式处理. 首先我们定义HTML结构,主Box为grid,每项为grid-cell,下面就是我们HTML代码结构. ...

  5. [javascript]event属性

    1.clientX和clientY clientX和clientY是事件发生时,鼠标离浏览器可视文档区域左上角的位置 2.offsetX和offsetY offsetX和offsetY是事件发生时,鼠 ...

  6. python运维开发之第三天

    一.第二天课程的复习总结 1.列表可以增删改查,元组是不可修改的列表,字符串是不可以修改的. 2.列表,元组是有序的,字典是无序的,字典的key唯一 3.列表字典可以嵌套列表,可以嵌套字典,可以嵌套多 ...

  7. Day5 双层装饰器、字符串格式化、生成器、迭代器、递归

    双层装饰器实现用户登录和权限认证 #!/usr/bin/env python# -*- coding: utf-8 -*-# Author: WangHuafeng USER_INFO = {} de ...

  8. struts2中的路径问题

    <?xml version="1.0" encoding="GB18030" ?><%@ page language="java&q ...

  9. listview底部增加按钮

    View bottomView=getActivity().getLayoutInflater().inflate(R.layout.btn_my_course, null); myCourses = ...

  10. keil c编译器错误与解决方法

    1. Warning 280:’i’:unreferenced local variable 说明局部变量i 在函数中未作任何的存取操作解决方法消除函数中i 变量的宣告 2 Warning 206:’ ...