版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)生活場景表現(xiàn)測驗(yàn)
- 小學(xué)故事演講模擬試卷
- 小學(xué)升學(xué)綜擇優(yōu)測試模擬試卷
- 如何應(yīng)對意外緊急情況
- 小學(xué)生物務(wù)實(shí)小測驗(yàn)
- 詩意花園:形容一朵美麗的花
- 親子生活互動(dòng)測試
- 中學(xué)生如何正確處理學(xué)習(xí)方法問題
- 會(huì)計(jì)高級職稱試題及答案
- 3.11 北洋政府的統(tǒng)治與軍閥割據(jù) 課件 2024-2025學(xué)年統(tǒng)編版八年級歷史上冊
- 健身房市場策略分析報(bào)告總結(jié)
- 定窯完整版本
- 傭金協(xié)議中英文范本
- 《認(rèn)識方向》(教案)青島版二年級上冊數(shù)學(xué)
- 第七章-網(wǎng)絡(luò)新聞寫作課件
- 工廠產(chǎn)能規(guī)劃
- 臨床醫(yī)療安全工作培訓(xùn)課件
- 統(tǒng)編(部編)高中語文必修上冊寫作訓(xùn)練題(解析)
- 2024年養(yǎng)老護(hù)理員(三級)資格理論考試題庫(濃縮500題)
- 三全水餃方案
- 醫(yī)工交叉方案
評論
0/150
提交評論