android發(fā)送短信驗(yàn)證碼并自動(dòng)獲取驗(yàn)證碼填充文本框

android注冊發(fā)送短信驗(yàn)證碼并自動(dòng)獲取短信舵变,截取數(shù)字驗(yàn)證碼填充文本框蚁孔。

一.接入短信平臺(tái)

首先需要選擇短信平臺(tái)接入睬魂,這里使用的是榛子云短信平臺(tái)(http://smsow.zhenzikj.com),

兩分鐘申請測試賬號模庐,贈(zèng)送了100條測試短信瑞你。

android使用java的jar包即可開發(fā)

jar下載:http://smsow.zhenzikj.com/doc/sdk.html

API文檔:?http://smsow.zhenzikj.com/doc/java_sdk_doc.html

使用測試賬號登錄管理后臺(tái)獲取appId酪惭、appSecret, 地址:http://sms.zhenzikj.com/zhenzisms_user

在"我的應(yīng)用"->"詳情"中打開:

1.安裝

下載后的SDK只包含一個(gè)jar文件,并且不依賴任何其他jar包或文件者甲,直接導(dǎo)入到工程中即可使用春感。

2.用法

使用事先申請的AppId、AppSecret初始化ZhenziSmsClient:

ZhenziSmsClient?client?=?new?ZhenziSmsClient(appId,?appSecret);

AppId虏缸、AppSecret是短信平臺(tái)分配的

1)發(fā)送短信

String?result?=?client.send("15811111111",?"您的驗(yàn)證碼為4534鲫懒,有效時(shí)間為5分鐘");

send方法用于單條發(fā)送短信

參數(shù)1:接收者手機(jī)號碼,參數(shù)2:短信內(nèi)容

返回結(jié)果是json格式的字符串, code: 發(fā)送狀態(tài)刽辙,0為成功窥岩。非0為發(fā)送失敗,可從data中查看錯(cuò)誤信息

{

????"code":0,

????"data":"發(fā)送成功"

}

二. 自動(dòng)獲取驗(yàn)證碼

大致思路

需要做以下幾步:

獲取短信內(nèi)容

判斷短信中是否含有驗(yàn)證碼扫倡,如果有則提取出來谦秧,如果沒有就告知用戶沒有匹配出短信驗(yàn)證碼

將匹配出的短信驗(yàn)證碼填充到文本框中

開始制作

1.)申請短信權(quán)限

?

????

注意>鼓伞!疚鲤!

由于Google在Android6.0引入了運(yùn)行時(shí)權(quán)限锥累,使得只要API版本大于23的都需要進(jìn)行權(quán)限的申請,在這里推薦使用一個(gè)非常簡單快速的第三方庫來進(jìn)行運(yùn)行時(shí)權(quán)限的申請集歇,Android 6.0運(yùn)行時(shí)權(quán)限第三方庫的使用—–RxPermissions

2.)注冊短信接收者

我們知道桶略,每當(dāng)系統(tǒng)接收到一條短信便會(huì)發(fā)出一條廣播,?

為此,我們首先需要做的就是配置一個(gè)廣播接收者來響應(yīng)這條廣播

AndroidManifest.xml文件中配置短信接受者:

??????

???????????


注意設(shè)置此廣播接收者的級別為最高(1000)

SMSReceiver.java

public?class?SMSReceiver?extends?BroadcastReceiver?{

????private?static?final?String?TAG?=?"SMSReceiver";

????@Override

????public?void?onReceive(Context?context,?Intent?intent)?{

????????//進(jìn)行獲取短信的操作

????????getMsg(context,?intent);

????}

}

3.)接下來進(jìn)行短信內(nèi)容的獲取

private?void?getMsg(Context?context,?Intent?intent)?{

????????//pdus短信單位pdu

????????//解析短信內(nèi)容

????????Object[]?pdus?=?(Object[])?intent.getExtras().get("pdus");

????????assert?pdus?!=?null;

????????for?(Object?pdu?:?pdus)?{

????????????//封裝短信參數(shù)的對象

????????????SmsMessage?sms?=?SmsMessage.createFromPdu((byte[])?pdu);

????????????String?number?=?sms.getOriginatingAddress();

????????????String?body?=?sms.getMessageBody();

????????????//寫自己的處理邏輯

????????????//獲取短信驗(yàn)證碼

????????????getCode(context,?body);

????????}

????}

通過SmsMessage對象可以得到短信的發(fā)送號碼诲宇,短信內(nèi)容及相關(guān)信息际歼。

匹配出驗(yàn)證碼并復(fù)制到剪貼板

這里我們就把驗(yàn)證碼放到剪切板了,當(dāng)然你也可以直接把它填充到文本框中

private?void?getCode(Context?context,?String?body)?{

????????//獲取剪貼板管理器:

????????ClipboardManager?cm?=?(ClipboardManager)?context.getSystemService(Context.CLIPBOARD_SERVICE);

????????Pattern?pattern1?=?Pattern.compile("(\\d{6})");//提取六位數(shù)字

????????Matcher?matcher1?=?pattern1.matcher(body);//進(jìn)行匹配

????????Pattern?pattern2?=?Pattern.compile("(\\d{4})");//提取四位數(shù)字

????????Matcher?matcher2?=?pattern2.matcher(body);//進(jìn)行匹配

????????if?(matcher1.find())?{//匹配成功

????????????String?code?=?matcher1.group(0);

????????????//?創(chuàng)建普通字符型ClipData

????????????ClipData?mClipData?=?ClipData.newPlainText("Label",?code);

????????????//?將ClipData內(nèi)容放到系統(tǒng)剪貼板里姑蓝。

????????????cm.setPrimaryClip(mClipData);

????????????Toast.makeText(context,?"驗(yàn)證碼復(fù)制成功",?Toast.LENGTH_SHORT).show();

????????????Log.d(TAG,?"onReceive:?"?+?code);

????????}?else?if?(matcher2.find())?{

????????????String?code?=?matcher2.group(0);

????????????//?創(chuàng)建普通字符型ClipData

????????????ClipData?mClipData?=?ClipData.newPlainText("Label",?code);

????????????//?將ClipData內(nèi)容放到系統(tǒng)剪貼板里鹅心。

????????????cm.setPrimaryClip(mClipData);

????????????Toast.makeText(context,?"驗(yàn)證碼復(fù)制成功",?Toast.LENGTH_SHORT).show();

????????????Log.d(TAG,?"onReceive:?"?+?code);

????????}?else?{

????????????Toast.makeText(context,?"未檢測到驗(yàn)證碼",?Toast.LENGTH_SHORT).show();

????????????Log.d(TAG,?"onReceive:?"?+?"未檢測到驗(yàn)證碼");

????????}

????}

在這里通過正則表達(dá)式匹配出短信內(nèi)容中的驗(yàn)證碼,因?yàn)轵?yàn)證碼大多數(shù)為4位或者6位纺荧,所以在這里為了簡化就直接進(jìn)行了4位驗(yàn)證碼和6位驗(yàn)證碼的判斷?

ok旭愧,大功告成.


http://smsow.zhenzikj.com/bbs/question/detail/38.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宙暇,隨后出現(xiàn)的幾起案子输枯,更是在濱河造成了極大的恐慌,老刑警劉巖占贫,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桃熄,死亡現(xiàn)場離奇詭異,居然都是意外死亡型奥,警方通過查閱死者的電腦和手機(jī)瞳收,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桩引,“玉大人颠悬,你說我怎么就攤上這事歌焦。” “怎么了雨让?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵卧惜,是天一觀的道長厘灼。 經(jīng)常有香客問我,道長咽瓷,這世上最難降的妖魔是什么设凹? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮茅姜,結(jié)果婚禮上闪朱,老公的妹妹穿的比我還像新娘月匣。我一直安慰自己,他們只是感情好奋姿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布锄开。 她就那樣靜靜地躺著,像睡著了一般称诗。 火紅的嫁衣襯著肌膚如雪萍悴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天寓免,我揣著相機(jī)與錄音癣诱,去河邊找鬼。 笑死袜香,一個(gè)胖子當(dāng)著我的面吹牛撕予,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜈首,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼嗅蔬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疾就?” 一聲冷哼從身側(cè)響起澜术,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猬腰,沒想到半個(gè)月后鸟废,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姑荷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年盒延,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鼠冕。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡添寺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出懈费,到底是詐尸還是另有隱情计露,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布憎乙,位于F島的核電站票罐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泞边。R本人自食惡果不足惜该押,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阵谚。 院中可真熱鬧蚕礼,春花似錦烟具、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至罩润,卻和暖如春玖翅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背割以。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工金度, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人严沥。 一個(gè)月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓猜极,卻偏偏與公主長得像,于是被迫代替她去往敵國和親消玄。 傳聞我的和親對象是個(gè)殘疾皇子跟伏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容