Android 문자 인증 코드 자동 작성 실현 코드

오늘 은 안 드 로 이 드 문자 인증 코드 자동 작성 기능 을 공유 합 니 다.먼저 효과 도 를 보고 핸드폰 에 문자 메 시 지 를 보 내 인증 코드 를 자동 으로 작성 했다.그림:

이 작은 기능 은 관찰자 모델 에 활용 되 었 는데 무엇이 관찰자 모델 입 니까?
관찰자 모드:대상 간 의 하나(Subject)가 다 중(Observer)에 대한 의존 관 계 를 정의 합 니 다.대상 의 상태 가 바 뀌 었 을 때 그 대상 에 의존 하 는 대상 은 알림 을 받 고 자동 으로 업 데 이 트 됩 니 다.이 사례 에서 우 리 는 문자 메시지 에 관찰 자 를 등록 하고 문자 기능(피 관찰자)이 정 보 를 받 으 면 등 록 된 관찰자 에 게 알려 준다.이번에 사 용 된 관찰 자 는 바로 ContentObserver 입 니 다.이것 은 특정한 uri 가 일 으 킨 데이터 베이스 변화 입 니 다.
다음은 내용 관찰자 의 사용 절 차 를 살 펴 보 자.
1.ContentObserver 의 파생 클래스 를 만 들 려 면 부모 클래스 의 구조 방법 을 다시 불 러 와 야 합 니 다.onChange()방법 을 다시 불 러 와 서 리 셋 후의 기능 을 처리 해 야 합 니 다.
2.콘 텐 츠 관찰 자 를 등록 하고 context.getContentResolver()를 이용 하여 콘 텐 츠 Resolver 대상 을 얻 은 다음 에 register contentobserver()방법 으로 콘 텐 츠 관찰 자 를 등록 합 니 다.
3.contentObserver 의 수명 주기 가 Activity 와 Service 와 일치 하지 않 기 때문에 필요 하지 않 을 때 수 동 으로 등록 을 취소 해 야 합 니 다.
다음은 코드:
1.레이아웃 의 xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 >

 <EditText 
 android:id="@+id/ed_smsVaild"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:hint="     "/>
</LinearLayout>
2.MainActivity 에서 주로 등록 및 취소 내용 관찰자

public class MainActivity extends Activity {

 public static final int SMSCODE = 1 ;

 SmsObserver smsObserver;

 private EditText editText;
 /**
 *   handle     ui  Edittext
 */
 private Handler mHandler = new Handler(){
 public void handleMessage(android.os.Message msg) {

  if (msg.what == SMSCODE) {
  String codeString = (String)msg.obj;
  editText.setText(codeString);
  }

 };
 };

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

 editText = (EditText) findViewById(R.id.ed_smsVaild);
 //          
 smsObserver = new SmsObserver(MainActivity.this, mHandler);
 //   uri content://sms
 Uri uri = Uri.parse("content://sms");
 //       
 this.getContentResolver().registerContentObserver(uri, true, smsObserver);
 }
 /**
 *                
 */
 @Override
 protected void onPause() {
 getContentResolver().unregisterContentObserver(smsObserver);
 }


}
3.가장 중요 한 내용 관찰자

public class SmsObserver extends ContentObserver{

 private Context mContext;
 private Handler mHandler;

 /**
 *       ,context       ,handle      ,    ui
 * @param context
 * @param handler
 */
 public SmsObserver(Context context,Handler handler){
 super(handler);
 this.mContext = context;
 this.mHandler = handler;
 }

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

 String code = "";

 Log.i("Info", "sms has changed");
 Log.i("Info", uri.toString());
 /**
  *  uri    content://sms/raw ,             ,
  *               
  */
 if (uri.toString().equals("content://sms/raw")) {
  return;
 }
 //    uri
 Uri inboxUri = Uri.parse("content://sms/inbox");
 //    ,         
 Cursor cursor = mContext.getContentResolver().query(inboxUri, null, null, null, "date desc");
 if (cursor != null) {
  if (cursor.moveToFirst()) {
  //          
  String address = cursor.getString(cursor.getColumnIndex("address"));
  String body = cursor.getString(cursor.getColumnIndex("body"));
  Log.i("info", "    :"+address +""+"     "+body);
  //     d{6}      6          
  Pattern pattern = Pattern.compile("(\\d{6})");
  //          
  Matcher matcher = pattern.matcher(body);
  if (matcher.find()) {
   code = matcher.group(0);
   Log.i("Info", code);
   // code      
   Message msMessage = new Message();
   msMessage.what = MainActivity.SMSCODE;
   msMessage.obj = code;
   mHandler.sendMessage(msMessage);
  }
  }
  cursor.close();

 }
 }

}
정규 표현 식 전에 판단 을 추가 할 수 있 습 니 다.특정한 번호 로 보 낸 문자 만 읽 을 수 있 습 니 다.

if(!address.equals("XXXXXXXXXXXX")){
 return;
}
마지막 으로 문자 읽 기 권한 도 추가 해 야 한다.자,거의 다 됐 습 니 다.
마지막 으로 소스 코드 를 첨부 합 니 다Android 문자 인증 코드 자동 작성
감사합니다. 무슨 문제 가 있 으 면 아래 에서 교류 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기