1. 程式人生 > >Android簡訊驗證碼mob,SMS的使用

Android簡訊驗證碼mob,SMS的使用

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裡封裝好的手機驗證,沒多大的用。這裡就不必記了!

如若發現有錯的地方,還希望各位博友們多多指出!