首页 > 代码库 > 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="服务器时间:"            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,发现交互很简单,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

加油 英语六级,只有自己强大了,人家才会找你,更好的平台给你.