日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 对短信的操作(伪造信息)

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 对短信的操作(伪造信息) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、調用系統發送短信界面(傳入手機號碼+短信內容)?
2、隱藏發送短信(指定號碼指定內容)(這里隱藏只是沒有反寫入數據庫)

3、獲得收件箱接收到的短信

4、Android屏蔽新短信通知提示信息:(ContentObserver)

4、刪除剛接收到的短信:

? ? ? A)、帶提示刪除

? ? ? ? B)、無新短信通知=刪除短信





所用到的相關數據類:

Intent、SmsManager、BroadcastReceiver、ContentObserver、Bundle

涉及動作(Action):

android.provider.Telephony.SMS_RECEIVED

涉及權限:

<!-- 短信 -->

<uses-permission android:name="android.permission.SEND_SMS" />

<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

<uses-permission android:name="android.permission.WRITE_SMS"></uses-permission>

<uses-permission android:name="android.permission.READ_SMS"></uses-permission>



1、調用系統發送短信界面(傳入手機號碼+短信內容)

(直接使用Intent 意圖執行系統的sms即可--同理這里可以使用該方式調用手機發送郵件等)源碼如下:

public void SendSMS( String aContent ){

// 新建smsto意圖

Intent iIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:158********"));//傳入要發送的地址

// 設置短信內容

iIntent.putExtra("sms_body", aContent);//設置傳遞的信息內容

// 啟動短信服務內容

aContent.startActivity(iIntent);//直接打開意圖即可

}

2、隱藏發送短信(指定號碼指定內容)(這里隱藏只是沒有反寫入數據庫)
創建發送自己的短信需要用到短信管理類SmsManager,使用它的sendTextMessage方法即可實現程序發送:

public void SendSMSHide(String aPhoneNUM, String aContent){

// 創建一個默認的SmsManager。

SmsManager aSmsManager = SmsManager.getDefault();

// 發送信息的intent參數。

String aSent = "SMS_SENT";

// 信息反饋的intent參數。

String aDelivered = "SMS_DELIVERED";



// 創建發送新信息的PendingIntent對象

PendingIntent aSentPI = PendingIntent.getBroadcast(this, 0, new Intent(aSent), 0);

// 信息反饋的PendingIntent。

PendingIntent aDeliveredPI = PendingIntent.getBroadcast(this, 0,

new Intent(aDelivered), 0);

aSmsManager .sendTextMessage(aPhoneNUM, null, aContent, aSentPI, aDeliveredPI);//發送短信(還可以發送彩信等)

//debuge

if(BOOL_ISDEBUGE){

Toast.makeText(aContent,"短信送出成功!!",Toast.LENGTH_SHORT ).show();

}

}


3、獲得收件箱接收到的短信

A)、方法一:

通過繼承BroadcastReceiver服務,處理onReceive函數,判斷接收到的動作為SMS_RECEIVED?

我將其封裝在ReceiveSMS(aContext, aIntent);函數中只需要在onReceive()函數中調用即可!

public void ReceiveSMS(Context aContext, Intent aIntent) {

if (aIntent.getAction().equals(SSTR_SMSACTION)) { // 監聽SMS_RECEIVED消息

Bundle iBundle = aIntent.getExtras(); // 獲取Intent數據

if (iBundle != null) {

Object[] iObject = (Object[]) iBundle.get("pdus"); // 獲取pdus對象

SmsMessage iMsg = SmsMessage.createFromPdu((byte[]) iObject[0]); // 初始化信息對象

m_strSMSAddress = iMsg.getDisplayOriginatingAddress(); // 獲取信息發送人

m_strSMSText = iMsg.getDisplayMessageBody(); // 獲取信息內容

?

Toast.makeText(aContext, "Address = "+m_strSMSAddress+"\nCountent = "+m_strSMSText, Toast.LENGTH_LONG).show();

}

}

}

B)、方法二:繼承ContentObserver類在onChange中調用(注冊監聽sms即可)

? ? ? this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);??

4、Android屏蔽新短信通知提示信息:(ContentObserver)

大致思路先從收件箱獲得指定未讀短信,在執行通知前更改為已讀,執行SQL的updata即可

? ? ? ? @Override??

? ? ? ? public void onChange(boolean selfChange) {??

? ? ? ? ? ? super.onChange(selfChange);??

? ? ? ? ? ? //讀取收件箱中指定號碼的短信??

cursor = managedQuery(Uri.parse("content://sms/inbox"),?

? ? ? ? ? ? new String[]{"_id", "address", "read"},?

? ? ? ? ? ? "read = 0", null,

? ? ? ? ? ? "date desc");

? ? ? cursor.moveToFirst();??

? ? ? ? for(int i =0;i<cursor.getCount();++i)

? ? ? ? ? ? {

? ? ? ? ? ? Log.i("address","address = "+cursor.getLong(1));

? ? ? ? ? ? if(cursor.getString(1).indexOf("136******")>=0)

? ? ? ? ? ? {//這里運用indexof方式查找,并沒有用比較因為系統會有國際號碼

? ? ? ? ? ? ? ? ContentValues values = new ContentValues();??

? ? ? ? ? ? ? ? values.put("read", "1");? ? ? ? //修改短信為已讀模式??

? ? ? ? ? ? ? ? ? ? getContentResolver().update(Uri.parse("content://sms/inbox"), values, " _id=?", new String[]{""+cursor.getInt(0)});??

? ? ? ? ? break;//這里如果跳出就只能更改一條(剛收到的可以這樣實現而且手機上方將不再有短信提示)

? ? ? ? ? ? }

? ? ? ? ? ? cursor.moveToNext();

? ? ? ? ? ? }

? ? ? ? }

5、刪除剛接收到的短信:

A)、帶提示刪除(這樣不知到有什么用。呵呵。寫出來分享)

短信能刪除但是當手機接收到短信時還會在手機通知里面顯示給用戶

繼承BroadcastReceiver類,首先獲得會話id在執行數據庫刪除即可

I、獲得會話id:

(思路這樣還可以簡潔的-網上找的大家也可以用上面的managedQuery方法)

private long getThreadId(Context aContext) {



long threadId = 0;



String SMS_READ_COLUMN = "read";



String WHERE_CONDITION = SMS_READ_COLUMN + " = 0";



String SORT_ORDER = "date DESC";



int count = 0;

Cursor cursor = aContext.getContentResolver().query(



Uri.parse("content://sms/inbox"),new String[] { "_id", "thread_id", "address", "person", "date",

"body" },WHERE_CONDITION,null,SORT_ORDER);





if (cursor != null) {try {count = cursor.getCount();



if (count > 0) {



cursor.moveToFirst();



threadId = cursor.getLong(1);}



} finally {cursor.close();}}

Log.i("threadId", String.valueOf(threadId));



return threadId;}

II、執行刪除:

這里我們可以在BroadcastReceiver的onReceive函數里面直接調用刪除方法如下:

long id = getThreadId(aContext);

Uri mUri=Uri.parse("content://sms/conversations/" + id);

//無條件刪除id所有會話,第二個參數可以添加條件

aContext.getContentResolver().delete(mUri, null, null);

但是這里你會發現你刪除的并不是你剛才發送的信息,而是你上一次發送的信息的所有,這里是為什么呢,原因是我們剛剛監聽的收件箱的時候當前會話是還沒有來得及創建的,所以刪除會話也是刪除的以前的,所以這里我們需要時間??梢杂萌缦路绞絹韺崿F:這樣就會成功了。但是這種方式短信通知依然存在

new Thread(){

public void run(){

try {sleep(600);//等待一段時間刪除

} catch (InterruptedException e) {

e.printStackTrace();}

long id = getThreadId(aContext);

Uri mUri=Uri.parse("content://sms/conversations/" + id);

aContext.getContentResolver().delete(mUri, null, null);

}}.start();

總結

以上是生活随笔為你收集整理的android 对短信的操作(伪造信息)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。