【移動(dòng)應(yīng)用開發(fā)技術(shù)】使用Android怎么監(jiān)聽手機(jī)短信_第1頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】使用Android怎么監(jiān)聽手機(jī)短信_第2頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】使用Android怎么監(jiān)聽手機(jī)短信_第3頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】使用Android怎么監(jiān)聽手機(jī)短信_第4頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】使用Android怎么監(jiān)聽手機(jī)短信_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

【移動(dòng)應(yīng)用開發(fā)技術(shù)】使用Android怎么監(jiān)聽手機(jī)短信

這篇文章給大家介紹使用Android怎么監(jiān)聽手機(jī)短信,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。前提--權(quán)限:<uses-permission

android:name="android.permission.RECEIVE_SMS"

>

</uses-permission>

<uses-permission

android:name="android.permission.READ_SMS"

>

</uses-permission>定義短信廣播接收者public

class

SMSBroadcastReceiverextends

BroadcastReceiver{

private

static

OnReceivedMessageListener

mOnReceivedMessageListener;

public

static

final

String

SMS_RECEIVED_ACTION

=

"vider.Telephony.SMS_RECEIVED";

public

SMSBroadcastReceiver(){

super();

}

@Override

public

void

onReceive(Context

context,

Intent

intent){

if

(intent.getAction().equals(SMS_RECEIVED_ACTION))

{

Object[]

pdus

=

(Object[])

intent.getExtras().get("pdus");

for(Object

pdu:pdus)

{

SmsMessage

smsMessage

=

SmsMessage.createFromPdu((byte

[])pdu);

String

sender

=

smsMessage.getDisplayOriginatingAddress();

String

content

=

smsMessage.getDisplayMessageBody();

long

date

=

smsMessage.getTimestampMillis();

Date

tiemDate

=

new

Date(date);

SimpleDateFormat

simpleDateFormat

=

new

SimpleDateFormat("yyyy-MM-dd

HH:mm:ss");

String

time

=

simpleDateFormat.format(tiemDate);

//過濾不需要讀取的短信的發(fā)送號碼

if

("106902780116481".equals(sender))

{

mOnReceivedMessageListener.onReceived(getDynamicPassword(content));

abortBroadcast();

}

}

}

}

public

interface

OnReceivedMessageListener{

void

onReceived(String

message);

}

public

void

setOnReceivedMessageListener(OnReceivedMessageListener

onReceivedMessageListener){

this.mOnReceivedMessageListener

=

onReceivedMessageListener;

}

/**

*

從字符串中截取連續(xù)6位數(shù)字組合

([0-9]{"

+

6

+

"})截取六位數(shù)字

進(jìn)行前后斷言不能出現(xiàn)數(shù)字

用于從短信中獲取動(dòng)態(tài)密碼

*

@param

str

短信內(nèi)容

*

@return

截取得到的6位動(dòng)態(tài)密碼

*/

public

String

getDynamicPassword(String

str){

//

6是驗(yàn)證碼的位數(shù),一般為六位

Pattern

continuousNumberPattern

=

Ppile("(?<![0-9])([0-9]{"

+

6

+

"})(?![0-9])");

Matcher

m

=

continuousNumberPattern.matcher(str);

String

dynamicPassword

=

"";

while

(m.find())

{

dynamicPassword

=

m.group();

}

return

dynamicPassword;

}

}注冊廣播SMSBroadcastReceiver

=

mSMSBroadcastReceiver

=

new

SMSBroadcastReceiver();

IntentFilter

intentFilter

=

new

IntentFilter(SMSBroadcastReceiver.SMS_RECEIVED_ACTION);

intentFilter.setPriority(Integer.MAX_VALUE);

this.registerReceiver(mSMSBroadcastReceiver,

intentFilter);

ToastManager.getInstance().showLongToast("注冊短信監(jiān)聽");

mSMSBroadcastReceiver.setOnReceivedMessageListener(new

SMSBroadcastReceiver.OnReceivedMessageListener()

{

@Override

public

void

onReceived(String

message){

//do

something

}

});方式二:監(jiān)聽短信數(shù)據(jù)庫內(nèi)容提供者中對外通信方式有3種:方式1:定義為Activity的內(nèi)部類,直接在onChang()方法中處理業(yè)務(wù)邏輯,比如收到短信之后設(shè)置給EditText優(yōu)點(diǎn):方便缺點(diǎn):耦合度高,復(fù)用性差方式2:定義接口,Activity實(shí)現(xiàn)這個(gè)接口,拿到回調(diào),處理業(yè)務(wù)邏輯優(yōu)點(diǎn):耦合度低,復(fù)用性高缺點(diǎn)沒用充分利用Handler資源代碼如下:/**

*

Created

by

wxw

on

2016/9/24

10:34

*

function:

監(jiān)聽短信數(shù)據(jù)庫

*

e-mail:wangxw725@163.com

*/

public

class

SmsContentObserverextends

ContentObserver{

private

Cursor

cursor

=

null;

private

Context

mContext;

private

String[]

projection

=

new

String[]{"_id","body"};

private

OnMessageObservedListener

mOnMessageObservedListener;

public

SmsContentObserver(Context

context,Handler

handler){

super(handler);

this.mContext

=

context;

}

public

interface

OnMessageObservedListener{

void

onObservedMessage(String

message);

}

public

void

setOnMessageObservedListener(OnMessageObservedListener

onMessageObservedListener){

this.mOnMessageObservedListener

=

onMessageObservedListener;

}

@Override

public

void

onChange(boolean

selfChange){

super.onChange(selfChange);

cursor

=

mContext.getContentResolver().query(Uri.parse("content://sms/inbox"),

projection,null,

null,

"_id

desc");

if

(cursor

!=

null

&&

cursor.getCount()

>

0)

{

cursor.moveToNext();

int

smsbodyColumn

=

cursor.getColumnIndex("body");

String

smsBody

=

cursor.getString(smsbodyColumn);

mOnMessageObservedListener.onObservedMessage(getDynamicPassword(smsBody));

}

cursor.close();

}

private

String

getDynamicPassword(String

str){

Pattern

continuousNumberPattern

=

Ppile("(?<![0-9])([0-9]{"

+

6

+

"})(?![0-9])");

Matcher

m

=

continuousNumberPattern.matcher(str);

String

dynamicPassword

=

"";

while

(m.find())

{

dynamicPassword

=

m.group();

}

return

dynamicPassword;

}

}方式3:通過Handler發(fā)送消息,在Activity中進(jìn)行業(yè)務(wù)邏輯處理代碼如下:/**

*

Created

by

wxw

on

2016/9/24

10:34

*

function:

監(jiān)聽短信數(shù)據(jù)庫

*

e-mail:wangxw725@163.com

*/

public

class

SmsContentObserverextends

ContentObserver{

private

Cursor

cursor

=

null;

private

Context

mContext;

private

Handler

mHandler;

private

String[]

projection

=

new

String[]{"_id","body"};

public

SmsContentObserver(Context

context,Handler

handler){

super(handler);

this.mContext

=

context;

this.mHandler

=

handler;

}

@Override

public

void

onChange(boolean

selfChange){

super.onChange(selfChange);

cursor

=

mContext.getContentResolver().query(Uri.parse("content://sms/inbox"),

projection,null,

null,

"_id

desc");

if

(cursor

!=

null

&&

cursor.getCount()

>

0)

{

cursor.moveToNext();

int

smsbodyColumn

=

cursor.getColumnIndex("body");

String

smsBody

=

cursor.getString(smsbodyColumn);

mHandler.obtainMessage(1,getDynamicPassword(smsBody)).sendToTarget();

}

cursor.close();

}

private

String

getDynamicPassword(String

str){

Pattern

continuousNumberPattern

=

Ppile("(?<![0-9])([0-9]{"

+

6

+

"})(?![0-9])");

Matcher

m

=

continuousNumberPattern.matcher(str);

String

dynamicPassword

=

"";

while

(m.find())

{

dynamicPassword

=

m.group();

}

return

dynamicPassword;

}

}注冊觀察者smsContentObserver

=

new

SmsContentObserver(this,

smsHandler);

getConten

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論