Android手机令牌教程

简介:

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();
        }

相关文章
|
1月前
|
Android开发 数据安全/隐私保护 虚拟化
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
88 4
|
1月前
|
API
查询城市手机号段免费API接口教程
此API用于查询指定城市的手机号段、服务商、区号、邮编等信息。支持POST或GET请求,需提供用户ID、KEY及城市名称等参数。返回数据包括状态码、信息提示、查询数量、最大页码、当前页码、省份、城市、区号、邮编、区划代码及数据集等。示例中提供的ID和KEY为公共测试用,建议使用个人ID和KEY以获得更高的调用频率。
|
1月前
|
API
手机号段查询城市免费API接口教程
此接口用于根据手机号段查询相关信息,包括城市、运营商、区号等。支持POST和GET请求,需提供用户ID、KEY及手机号段前7位作为参数。返回数据包含状态码、信息提示及详细归属信息。示例请求地址:https://cn.apihz.cn/api/ip/haoduan.php?id=88888888&key=88888888&numbers=1321993。接口免费,建议使用个人ID与KEY以独享调用频次。
|
1月前
|
API
查手机号归属地免费API接口教程
此API用于查询指定手机号码的归属地信息,包括号段、省份、城市、运营商等。支持POST和GET请求方式,需提供用户ID、KEY及手机号作为参数。返回结果包含状态码、信息提示及详细归属地信息。示例请求地址:https://cn.apihz.cn/api/ip/shouji.php?id=88888888&key=88888888&phone=13219931963。
|
2月前
|
存储 Android开发 网络架构
点心云-N1盒子、机顶盒、手机等设备-小白保姆式刷机教程
本文介绍了N1盒子的刷机教程,包括未刷机和已刷其他系统的N1。教程详细列出了所需工具和具体步骤,如下载工具包、制作安装盘、打开ADB模式、降级、刷入新系统等,确保用户能够顺利完成刷机操作。对于已刷第三方系统的N1,还提供了解决USB线不被识别、驱动问题及供电不足等常见问题的方法。
286 1
点心云-N1盒子、机顶盒、手机等设备-小白保姆式刷机教程
|
1月前
|
Android开发
布谷语音软件开发:android端语音软件搭建开发教程
语音软件搭建android端语音软件开发教程!
|
1月前
|
安全 搜索推荐 Android开发
Android vs. iOS:解锁智能手机操作系统的奥秘####
【10月更文挑战第21天】 在当今这个数字化时代,智能手机已成为我们生活中不可或缺的伙伴。本文旨在深入浅出地探讨两大主流操作系统——Android与iOS的核心差异、优势及未来趋势,帮助读者更好地理解这两个平台背后的技术哲学和用户体验设计。通过对比分析,揭示它们如何塑造了我们的数字生活方式,并展望未来可能的发展路径。无论您是技术爱好者还是普通用户,这篇文章都将带您走进一个充满创新与可能性的移动世界。 ####
78 3
|
2月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
170 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
2月前
|
Web App开发 Android开发
利用firefox调试安卓手机端web
该教程详细介绍如何通过Firefox浏览器实现手机与电脑的远程调试。手机端需安装最新版Firefox,并按指定步骤设置完成;电脑端则需安装15版及以上Firefox。设置完成后,通过工具栏中的“远程调试”选项,输入手机IP地址即可连接。连接确认后,即可使用电脑端Firefox调试器调试手机上的Web信息。注意,调试前手机需提前打开目标网页。
104 2
|
2月前
|
Android开发 iOS开发 UED
安卓与iOS的较量:谁才是智能手机市场的王者?
本文将深入探讨安卓和iOS两大智能手机操作系统之间的竞争关系,分析它们各自的优势和劣势。通过对比两者在市场份额、用户体验、应用生态等方面的表现,我们将揭示出谁才是真正的市场领导者。无论你是安卓粉丝还是iOS忠实用户,这篇文章都将为你提供一些有趣的观点和见解。