Android 문자 인증 코드 자동 충전 기능

필 자 는 많은 응용 프로그램 에서 인증 코드 를 자동 으로 얻 는 기능 이 있다 는 것 을 발견 했다.인증 코드 를 얻 기 단 추 를 누 르 면 문 자 를 받 을 수 있다.현재 응용 프로그램 은 프로그램 을 종료 하지 않 아 도 문자 메시지 의 인증 코드 를 얻 고 자동 으로 채 울 수 있다.이런 사용자 체험 이 매우 좋다 고 생각 합 니 다.사용자 가 문자 와 앱 사 이 를 왔다갔다 할 필요 가 없습니다.이 기능 은 어떻게 실현 되 었 습 니까?사실 아주 간단 합 니 다.안 드 로 이 드 에 있 는 ContentObserver 라 는 것 을 사 용 했 습 니 다.아래 수 동 으로 간단하게 하 나 를 실현 합 니 다~~~
1.ContentObserver 개발
주로 수신 함 내용 을 감청 하 는 데 쓰 인 다.새로운 소식 이 오 면 내 가 원 하 는 번호 로 보 낸 문자 인지 감청 하고,그렇다면 정규 표현 식 으로 직접 캡 처 한다.

/**
 *        
 * 
 * @author yangfan
 * 
 */
public class SMSContentObserver extends ContentObserver
{

 private Context mContext; //    
 private Handler mHandler; //   UI  
 private String code; //    

 public SMSContentObserver(Context context, Handler handler)
 {
 super(handler);
 mContext = context;
 mHandler = handler;
 }

 /**
 *     ,      Uri     ,       
 * 
 *                
 * 
 * @param selfChange
 *                 false
 */
 @Override
 public void onChange(boolean selfChange, Uri uri)
 {

 Log.e("XXXXXXXXXXXXXXXX", uri.toString());

 //                   
 if (uri.toString().equals("content://sms/raw"))
 {
 return;
 }

 //                
 Uri inboxUri = Uri.parse("content://sms/inbox");

 //             
 Cursor c = mContext.getContentResolver().query(inboxUri, null, null,
 null, "date desc");
 if (c != null)
 {
 if (c.moveToFirst())
 {

 //      
 String address = c.getString(c.getColumnIndex("address"));
 //       
 String body = c.getString(c.getColumnIndex("body"));
 //             
 if (!address.equals("      "))
 {
  return;
 }

 //            6    
 Pattern pattern = Pattern.compile("(\\d{6})");
 Matcher matcher = pattern.matcher(body);

 //       Handler      
 if (matcher.find())
 {
  code = matcher.group(0);
  mHandler.obtainMessage(1, code).sendToTarget();
 }
 }

 }
 c.close();

 }

}
2.레이아웃 과 Activity

<LinearLayout 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:padding="50dp" >

 <TextView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="      :" />

 <EditText
 android:id="@+id/smsCode"
 android:focusable="false"
 android:focusableInTouchMode="false"
 android:layout_width="match_parent"
 android:layout_height="wrap_content" />

</LinearLayout>
public class MainActivity extends ActionBarActivity
{
 private EditText code;

 @SuppressLint("HandlerLeak")
 Handler handler = new Handler()
 {
 @Override
 public void handleMessage(Message msg)
 {
 if (msg.what == 1)
 {
 code.setText(msg.obj.toString());
 }
 }
 };

 @Override
 protected void onCreate(Bundle savedInstanceState)
 {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 code = (EditText) findViewById(R.id.smsCode);

 SMSContentObserver smsContentObserver = new SMSContentObserver(
 MainActivity.this, handler);

 MainActivity.this.getContentResolver().registerContentObserver(
 Uri.parse("content://sms/"), true, smsContentObserver);
 }
}
3.권한 을 부여 하 는 것 을 잊 지 마 세 요.
 
4.테스트 실행
본인 은 핸드폰 두 개 를 가지 고 테스트 를 했 어 요.

문자 인증 코드 자동 가 져 오기.png
코드 주소:https://github.com/yungfan/SMSSMSContentObserver
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기