안 드 로 이 드 노트 는 어떻게 문자 의 실시 간 내용 을 얻 습 니까?

많은 상점 app 에 등록 할 때 인증 코드 를 등록 하고 핸드폰 문자 메시지 의 인증 코드 를 자동 으로 가 져 와 야 합 니 다.문자 가 왔 을 때 우 리 는 문자 의 인증 번 호 를 받 아야 합 니 다. 어떻게 인증 번 호 를 받 습 니까?우선 우 리 는 문자 메 시 지 를 감청 한 후에 문자 의 내용 을 얻 은 다음 에 정규 표현 식 으로 우리 가 필요 로 하 는 인증 코드 를 꺼 내야 한다.
먼저 문자 메 시 지 를 어떻게 얻 는 지 살 펴 보 자. 핸드폰 의 주소록 정보, 문자 메 시 지 는 모두 ContentProvider 에 저장 되 어 있다.저희 가 문 자 를 감청 하려 면 콘 텐 츠 관찰자 인 ContentObserver 를 사용 해 야 합 니 다. ContentObserver 에 대해 잘 모 르 시 면 여 기 를 클릭 해서 우회전 하 세 요.http://blog.csdn.net/qinjuning/article/details/7047607 우 리 는 콘 텐 츠 Observer 를 계승 하여 문자 에 대한 감청 을 실현 한다.문자 읽 기 권한 추가
코드 직접 올 리 기
package com.example.demoobsever;

import android.app.Activity;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class MainActivity extends Activity {
    private TextView vSms;//    TextView
    private SMSContent smsObsever;//     

    private Handler handler =new Handler(){
        public void handleMessage(android.os.Message msg) {
            Bundle bundle=msg.getData();
            String body=bundle.getString("body");
            vSms.setText(body);
        };
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vSms=(TextView) this.findViewById(R.id.tx_sms);//      
        smsObsever=new SMSContent(handler);//        
    //       
            getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, smsObsever);
    }
    /**
     * @description      
     * @author Administrator
     *
     */
    class SMSContent extends ContentObserver {
        private Handler mHandler;
        public SMSContent(Handler handler) {
            super(handler);
            mHandler=handler;
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            Cursor cursor = null;
            String body=null;
            try {
                cursor = getContentResolver().query(
                        Uri.parse("content://sms/inbox"), null, null, null,
                        "date desc");
                if(cursor!=null){
                    if(cursor.moveToNext()){//              
                        //         
                        body=cursor.getString(cursor.getColumnIndex("body"));
                        Message msg=Message.obtain();
                        Bundle bundle=new Bundle();
                        bundle.putString("body", body);
                        msg.setData(bundle);
                        mHandler.sendMessage(msg);
                    }

                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                if(cursor!=null){
                    cursor.close();
                }

            }
        }
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //    
        getContentResolver().unregisterContentObserver(smsObsever);
    }
}

문자 내용 을 가 져 오 는 것 입 니 다. 인증 코드 를 가 져 오 려 면 Pattern 으로 일치 하면 됩 니 다.여 기 는 더 이상 소개 하지 않 겠 습 니 다.

좋은 웹페이지 즐겨찾기