編輯:關於Android編程
我已經介紹了如何快速集成MOB短信驗證SDK,那今天我們講什麼呢?我們今天講一下如何不使用SDK中的GUI界面。對!我們今天來學習怎麼自定義GUI,說的直白點就是自定義界面並把開發中所要用的接口綁定到自定義界面的控件上。
首先,我們還是看一下SDK中為我們提供了那些靜態方法(這說明了我們只要類點方法名,對應傳參就行了)?
1初始化接口
1.1 initSDK(Context context, String appkey, String appSecrect) 初始化SDK,單例,可以多次調用;任何方法調用前,必須先初始化 屌絲我放在了application中 全局性質 (初始化有用)
1.2 registerEventHandler(EventHandler handler) 注冊回調接口 這個我放在了要用的activity的oncreate()方法裡 注意這是回掉,如果不用handler的消息機制是會報錯的 它會提示你create一個handler去解決這個問題 後面會講到土司不能在這裡面寫 (注測要用的)
1.3 unregisterEventHandler(EventHandler handler)注銷回調接口 都說注銷 意思就是destory() 我放在activity的onDestory()裡 (注銷也要用的 不然會內存溢出 OOM了)
2.短信驗證碼接口
2.1getSupportedCountries()獲取短信目前支持的國家列表 (一般我們做的是國內項目,外國項目很少會用到這個 默認直接傳字符串“ 86” 這裡指的是中國 基本不需要用 直接傳值,看需求吧)
2.2getVerificationCode(String country, String phone)請求獲取短信驗證碼(這個也要用的 我們做短信驗證不可缺少啊 )
2.3submitVerificationCode(String country, String phone, String code)提交短信驗證碼 (這個就是提交驗證碼並驗證 我這裡用的是MOB的智能驗證,所以在客戶端沒顯示 有用的)
3.用戶接口
3.1submitUserInfo(String uid, String nickname, String avatar, String country, String phone)提交用戶信息 (有用的 就是提交到自己的服務器上)
3.2getNewFriendsCount()獲取應用內新增加的好友數(感覺沒啥用 看需求吧)
3.3getFriendsInApp()獲取應用內的好友列表 (上同)
4.語音驗證接口
4.1getVoiceVerifyCode(String phone , String country)請求語音驗證碼2.0.0以下版本 (高科技的樣子,我們初次注冊點餐軟件時好像用過,沒啥用 看需求)
4.2getVoiceVerifyCode(String country,String phone)請求語音驗證碼2.0.0與之後的 (上同)
這些接口 從上往下的順序去使用就行了
基本思路就是
1.初始化接口 就是基本的接口進行配置
2.我要做什麼功能呢?對,我們要短信驗證啊 那就調短信請求接口
3.我們得到短信了,那我們要干啥?驗證呀!
4.驗證完,我們這個用戶的信息我們是不是要保存下來啊 那就提交服務器咯
接下來我們看代碼
看著上面的思路:
1.我們要初始化吧,勢必要初始化接口那就application裡初始化咯
package com.example.boom.messageproject.application; import android.app.Application; import cn.smssdk.SMSSDK; /** * Created by Boom on 2016/8/1. */ public class App extends Application { @Override public void onCreate() { super.onCreate(); SMSSDK.initSDK(this, "你的key", "你的密鑰"); } }2.那我們要用這個東西吧,就要注冊吧!
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.regeister); //注冊短信回調 SMSSDK.registerEventHandler(new EventHandler() { @Override public void afterEvent(int event, int result, Object data) { Message msg = Message.obtain(); msg.arg1 = event; msg.arg2 = result; msg.obj = data; handler.sendMessage(msg); } }); findViewId(); init(); }3.注冊完,我們千萬不要忘記要注銷 那麼我們現在就寫好,以免之後忘了
@Override protected void onDestroy() { super.onDestroy(); SMSSDK.unregisterAllEventHandler(); }
//計時器 private CountDownTimer timer = new CountDownTimer(60000, 1000) { @Override public void onTick(long millisUntilFinished) { btnView.setText((millisUntilFinished / 1000) + "秒後可重發"); } @Override public void onFinish() { btnView.setEnabled(true); btnView.setText("獲取驗證碼"); } };調用時:
case R.id.get_btn: btnView.requestFocus(); if (vaildateinfo()) { //啟動獲取驗證碼 86是中國 String zh=csed1.getText().toString().trim(); SMSSDK.getVerificationCode("86", zh); timer.start(); } break;其中還有手機號和密碼的驗證 其中葉子定義了待刪除圖片的EditText
//驗證注冊信息 private boolean vaildateinfo() { csed1 = (EditText) findViewById(R.id.csed1); csed2 = (EditText) findViewById(R.id.csed2); String zh = csed1.getText().toString().trim(); String pwd = csed2.getText().toString().trim(); //首先要判斷是否為空 if (!zh.equals("") || null != zh) { if (zh.length() == 11) { if (!pwd.equals("") || null != pwd) { if (pwd.length() == 8) { return true; } else { Toast.makeText(Regeister.this, "密碼不足8位", Toast.LENGTH_SHORT).show(); csed2.requestFocus(); } } else { Toast.makeText(Regeister.this, "密碼不能為空", Toast.LENGTH_SHORT).show(); csed2.requestFocus(); } } else { Toast.makeText(Regeister.this, "手機號不足11位", Toast.LENGTH_SHORT).show(); csed1.requestFocus(); } } else { Toast.makeText(Regeister.this, "手機號不能為空", Toast.LENGTH_SHORT).show(); csed1.requestFocus(); } return false; }帶刪除按鈕的EditText,這裡就不介紹了 之前寫過,看前面寫的博客
5.獲取驗證碼後,驗證驗證碼。我們要把得到的驗證碼填到編輯域吧(當然,手動填寫是不是感覺已經out了 我們也可以自定義廣播,攔截這樣的信息 自動填入文本框中 這種效果很友好,後期我會講到,我們先用老方法)
//驗證 驗證碼 private void vaildatePassword() { String code = vaildatepwd.getText().toString().trim(); String zh=csed1.getText().toString().trim(); SMSSDK.submitVerificationCode("86", zh, code); putUserInfo("86", zh); }
XML文件代碼如下:
java代碼:
package com.example.boom.messageproject.activity; import android.app.Activity; import android.os.Bundle; import android.os.CountDownTimer; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.example.boom.messageproject.R; import java.util.Random; import cn.smssdk.EventHandler; import cn.smssdk.SMSSDK; /** * Created by Boom on 2016/8/2. */ public class Regeister extends Activity implements View.OnClickListener { private static final String[] AVATARS = new String[400]; TextView btnView; EditText csed1 = null, csed2 = null; EditText vaildatepwd = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.regeister); //注冊短信回調 SMSSDK.registerEventHandler(new EventHandler() { @Override public void afterEvent(int event, int result, Object data) { Message msg = Message.obtain(); msg.arg1 = event; msg.arg2 = result; msg.obj = data; handler.sendMessage(msg); } }); findViewId(); init(); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); int event = msg.arg1; int result = msg.arg2; Object data = msg.obj; if (result == SMSSDK.RESULT_COMPLETE) { //回調完成 Toast.makeText(Regeister.this, "回調完成", Toast.LENGTH_SHORT).show(); if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) { //提交驗證碼成功 Toast.makeText(Regeister.this, "提交驗證碼成功", Toast.LENGTH_SHORT).show(); } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) { //獲取驗證碼成功 Toast.makeText(Regeister.this, "獲取驗證碼成功", Toast.LENGTH_SHORT).show(); } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) { //返回支持發送驗證碼的國家列表 Toast.makeText(Regeister.this, "返回支持發送驗證碼的國家列表", Toast.LENGTH_SHORT).show(); } } else { //回調失敗 ((Throwable) data).printStackTrace(); } } }; private void findViewId() { btnView = (TextView) findViewById(R.id.get_btn); vaildatepwd = (EditText) findViewById(R.id.vaildatepwd); } private void init() { btnView.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { //點擊獲取驗證碼控件 case R.id.get_btn: btnView.requestFocus(); if (vaildateinfo()) { //啟動獲取驗證碼 86是中國 String zh = csed1.getText().toString().trim(); SMSSDK.getVerificationCode("86", zh); timer.start(); } break; //點擊提交信息按鈕 case R.id.rgs_btn: VaildateputInfo(); break; } } /** * 1.驗證驗證碼 * 2.提交用戶信息 */ private void VaildateputInfo() { vaildatePassword(); } //驗證 驗證碼 private void vaildatePassword() { String code = vaildatepwd.getText().toString().trim(); String zh = csed1.getText().toString().trim(); SMSSDK.submitVerificationCode("86", zh, code); putUserInfo("86", zh); } //提交用戶信息 private void putUserInfo(String country, String phone) { Random rnd = new Random(); int id = Math.abs(rnd.nextInt()); String uid = String.valueOf(id); String nickName = "SmsSDK_User_" + uid; String avatar = AVATARS[id % 12]; SMSSDK.submitUserInfo(uid, nickName, avatar, country, phone); } //計時器 private CountDownTimer timer = new CountDownTimer(60000, 1000) { @Override public void onTick(long millisUntilFinished) { btnView.setText((millisUntilFinished / 1000) + "秒後可重發"); } @Override public void onFinish() { btnView.setEnabled(true); btnView.setText("獲取驗證碼"); } }; @Override protected void onDestroy() { super.onDestroy(); SMSSDK.unregisterAllEventHandler(); } //驗證注冊信息 private boolean vaildateinfo() { csed1 = (EditText) findViewById(R.id.csed1); csed2 = (EditText) findViewById(R.id.csed2); String zh = csed1.getText().toString().trim(); String pwd = csed2.getText().toString().trim(); //首先要判斷是否為空 if (!zh.equals("") || null != zh) { if (zh.length() == 11) { if (!pwd.equals("") || null != pwd) { if (pwd.length() == 8) { return true; } else { Toast.makeText(Regeister.this, "密碼不足8位", Toast.LENGTH_SHORT).show(); csed2.requestFocus(); } } else { Toast.makeText(Regeister.this, "密碼不能為空", Toast.LENGTH_SHORT).show(); csed2.requestFocus(); } } else { Toast.makeText(Regeister.this, "手機號不足11位", Toast.LENGTH_SHORT).show(); csed1.requestFocus(); } } else { Toast.makeText(Regeister.this, "手機號不能為空", Toast.LENGTH_SHORT).show(); csed1.requestFocus(); } return false; } }效果如下
總結下近一年的學習經歷,以中國的新年為節點。時間從2015年年後到今天,2015年年末。首先我必須要感謝前輩的書籍和高質量的博客。1、重新學習了一遍《Linux內核源代碼
如何在ES文件浏覽器內使用網盤。是一款多功能的手機文件/程序/進程管理器,可以在手機、電腦、遠程和藍牙間浏覽管理文件,是一個功能強大的免費的本地和網絡文件管
實現Android動態部署的過程中最重要的是從插件apk中啟動四大組件,經過前面幾篇文章的分析,現在只剩下BroadcastReceiver和ContentProvide
我們要實現的目標是:做一個短信發送器 界面: 因為要涉及到短信發送這種屬於隱私的問題,所以我們要在AndroidManifest.xml中添加一行代碼,來獲得權限: 然