Android簡訊驗證碼mob,SMS的使用
阿新 • • 發佈:2019-01-09
1,Android sdutio匯入SMS框架
2,程式碼實現
①,獲取手機驗證碼,
②,提交驗證碼
③,擷取簡訊中的驗證碼
一,Android sdutio匯入SMS框架
1,下載SMS
2,匯入SMS
1,正常匯入
2,Module匯入:
Module使用SMS,如果用以上方法不行,建議使用以下方法。
或以下方法
①在Android studio的File -> New -> New module進入“create new module”對話方塊
②、選中“Import .jar/.aar Package”後點擊“下一步”,然後在對話方塊裡選擇你的aar檔案
③、點選“下一步”就匯入工程了
④、新增依靠
之後設定manifest。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hanhai.group.mynotemob">
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true">
<!--這裡的Activity是SMS裡封裝好的一個手機驗證,可以直接呼叫-->
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize"/>
<activity android:name=".NoteMobActivity"></activity>
</application>
</manifest>
二,程式碼實現
Activity程式碼如下:
public class NoteMobActivity extends AppCompatActivity {
@BindView(R.id.et)//findViewById
EditText editText;
@BindView(R.id.et1)//findViewById
EditText editText1;
private String APPKEY="1a8c72c356cc0";
private String APPSECRET="bc6478ed89c7ea2b3a1be04e298856ed";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);//黃油刀
//初始化SDK
SMSSDK.initSDK(this, APPKEY, APPSECRET);
SMSSDK.registerEventHandler(eh); //註冊簡訊回撥
// 簡訊監聽變化
SmsContent content = new SmsContent(this, new Handler(),editText);
// 簡訊變化監聽
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);
}
@OnClick(R.id.button)//監聽
public void button(){
ed=editText1.getText().toString();
if (!ed.equals("")){
Log.i("yyy", "tel "+ed);
//請求向手機發送驗證碼,
SMSSDK.getVerificationCode("86", ed);//86為國家程式碼(注:不是"+86"),ed為手機號碼String型別
}
}
String ed;
@OnClick(R.id.button_ok)
public void button_ok(){
String a=editText.getText().toString();
if (a!=null) {
Log.i("yyy", "editText="+a);
//提交驗證碼,判斷驗證碼是否正確
SMSSDK.submitVerificationCode("86",ed, a);//86為國家程式碼(注:不是"+86"),ed為手機號碼String型別,a為,需要提交的驗證碼
}
}
EventHandler eh = new EventHandler() {//註冊簡訊的回撥
@Override
public void afterEvent(int event, int result, Object data) {
Log.i("yyy","yyy:"+event+" result:"+result+" data:"+data.toString());
switch (event) {
case SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE://簡訊驗證是否成功的回撥
if (result == SMSSDK.RESULT_COMPLETE) {
Log.i("yyy", "驗證成功");//為了簡潔就直接列印log了
} else {
Log.i("yyy", "驗證失敗");//為了簡潔就直接列印log了
}
break;
case SMSSDK.EVENT_GET_VERIFICATION_CODE://簡訊是否向手機發送成功的回撥
if (result == SMSSDK.RESULT_COMPLETE) {
Log.i("yyy", "獲取驗證碼成功");//為了簡潔就直接列印log了
//預設的智慧驗證是開啟的,我已經在後臺關閉
} else {
Log.i("yyy", "獲取驗證碼失敗");//為了簡潔就直接列印log了
}
break;
}
}
};
}
SmsContent程式碼如下:
public class SmsContent extends ContentObserver {
private String SMS_URI_INBOX = "content://sms/inbox";
private Activity activity = null;
private String smsContent = "";
private EditText editText = null;
private String tel = "1065712071171471";//讀取收件箱中指定的號碼
public SmsContent(Activity activity, Handler handler, EditText editText) {
super(handler);
this.activity = activity;
this.editText = editText;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Cursor cursor = null;// 游標
// 讀取收件箱中指定號碼的簡訊
cursor = activity.managedQuery(Uri.parse(SMS_URI_INBOX), new String[]{"_id", "address", "body", "read"}, "address=? and read=?",
new String[]{tel, "1"}, "date desc");
if (cursor != null) {// 如果簡訊為未讀模式
Log.i("yyy", "收到簡訊 ");
cursor.moveToFirst();
if (cursor.moveToFirst()) {
String smsbody = cursor.getString(cursor.getColumnIndex("body"));
String regEx = "[^0-9]";//正則表示式0到9之間的數字
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(smsbody.toString());
smsContent = m.replaceAll("").trim().toString();
editText.setText(smsContent);
}
}
}
}
XML佈局如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.hanhai.group.textactivity.MainActivity">
<EditText
android:id="@+id/et1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="輸入手機號碼"
/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="獲取簡訊驗證碼" />
<EditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入驗證碼"
/>
<Button
android:id="@+id/button_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提交驗證碼" />
</LinearLayout>
自認為SMS裡封裝好的手機驗證,沒多大的用。這裡就不必記了!
如若發現有錯的地方,還希望各位博友們多多指出!