1:獲得內(nèi)天提供者解析器: ContentResolver contentResolver = getContentResolver();
我們注重客戶提出的每個(gè)要求,我們充分考慮每一個(gè)細(xì)節(jié),我們積極的做好網(wǎng)站建設(shè)、網(wǎng)站制作服務(wù),我們努力開(kāi)拓更好的視野,通過(guò)不懈的努力,創(chuàng)新互聯(lián)贏得了業(yè)內(nèi)的良好聲譽(yù),這一切,也不斷的激勵(lì)著我們更好的服務(wù)客戶。 主要業(yè)務(wù):網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),微信小程序開(kāi)發(fā),網(wǎng)站開(kāi)發(fā),技術(shù)開(kāi)發(fā)實(shí)力,DIV+CSS,PHP及ASP,ASP.Net,SQL數(shù)據(jù)庫(kù)的技術(shù)開(kāi)發(fā)工程師。
2:設(shè)置uri:Uri uri = Uri.parse("content://sms")
3:執(zhí)行delete方法: contentResolver.delete(uri,null,null);
看你上面寫(xiě)的似乎不想刪除全部,執(zhí)行刪除某一個(gè)?
你的這兩個(gè)方法:
mResolver.delete(Uri.parse("content://sms/"), "_id="+ id, null));
mResolver.delete(Uri.parse("content://sms/" ), "thread_id="+ threadId, null));
第一個(gè)參數(shù)uri,第二個(gè)參數(shù):條件,第三個(gè)參數(shù):條件的值:
mResolver.delete(Uri.parse("content://sms/"), "_id=?", new String[]{"xxx"});
mResolver.delete(Uri.parse("content://sms/" ), "thread_id=?", new String[]{"xxx"}));
這里需要使用到?:占位符。
請(qǐng)熟讀sql語(yǔ)句,和方法的參數(shù)。
Android APK操作短信數(shù)據(jù)時(shí),不能使用SQLHelper直接操作,需要使用協(xié)議,協(xié)議使用Uri轉(zhuǎn)義
content://sms/inbox 收件箱
content://sms/sent 已發(fā)送
content://sms/draft 草稿
content://sms/outbox 發(fā)件中
content://sms/failed 失敗
content://sms/queued 待發(fā)送
數(shù)據(jù)庫(kù)中sms相關(guān)的字段如下:
_id primary key integer 與words表內(nèi)的source_id關(guān)聯(lián)
thread_id 會(huì)話id,一個(gè)聯(lián)系人的會(huì)話一個(gè)id,與threads表內(nèi)的_id關(guān)聯(lián) integer
address 對(duì)方號(hào)碼 text
person 聯(lián)系人id integer
date 發(fā)件日期 integer
protocol 通信協(xié)議,判斷是短信還是彩信 integer 0:SMS_RPOTO, 1:MMS_PROTO
read 是否閱讀 integer default 0 0:未讀, 1:已讀
status 狀態(tài) integer default-1 -1:接收,
0:complete,
64: pending,
128: failed
type 短信類型 integer 1:inbox
2:sent
3:draft56
4:outbox
5:failed
6:queued
body 內(nèi)容
service_center 服務(wù)中心號(hào)碼
subject 主題
reply_path_present
locked
error_code
seen
具體使用方法:
Cursor cursor = mContentResolver.query(Uri.parse("content://sms"), String[] projection, String selection, String[] selectionArgs,String sortOrder);
if(cursor!=null)
if(cursor.moveToFirst())
{String address = cursor .getString(draftCursor.getColumnIndexOrThrow("address"));}
query轉(zhuǎn)義sql語(yǔ)句時(shí)將query函數(shù)中的參數(shù)轉(zhuǎn)義為
select projection[] from sms where selection[] = selectionArgs[] order by sortOrder
由于Android2.2 Messaging中存儲(chǔ)草稿短信時(shí)不會(huì)將address存入sms表中,而以thread_id為索引,將草稿短信的address存入canonical_addresses表中而導(dǎo)致僅根據(jù)協(xié)議無(wú)法查詢到draft msgs address(這種設(shè)計(jì)缺陷是因?yàn)锳ndroid為了使UI更加效率而使draft msgs不同于其他類型的msgs存儲(chǔ)方式所導(dǎo)致的),那么根據(jù)這樣的轉(zhuǎn)義方式我們可以擴(kuò)展一下這種select語(yǔ)句使他可以查詢到sms表以外的東西:
Cursor draftCursor = mResolver.query(Uri.parse("content://sms"),
new String[] {"canonical_addresses.address " +
"from sms,threads,canonical_addresses " +
"where sms.thread_id=threads._id and threads.recipient_ids=canonical_addresses._id and sms._id ='" +
String.valueOf(target_message_id) + "' --"},
null, null, null);
有點(diǎn)?;^,是吧,用到了sql語(yǔ)句中注釋符號(hào)“--”
這樣我們就將這個(gè)語(yǔ)句轉(zhuǎn)化為了:
select canonical_addresses.address from sms,threads,canonical_addresses where sms.thread_id=threads._id and threads.recipient_ids=canonical_addresses._id and sms._id = 'target_message_id' -- from sms
在sql語(yǔ)句解析的時(shí)候,--from sms是不予解析的,所以就成功執(zhí)行了前面的聯(lián)合查詢操作而得到了我們想要的canonical_addresses表中的address數(shù)據(jù)。
這應(yīng)該是群發(fā)短信軟件的問(wèn)題。
也就是說(shuō),在軟件編寫(xiě)中,加入了發(fā)送數(shù)目的判斷。當(dāng)數(shù)目多于一定量時(shí),出現(xiàn)對(duì)話框。
有這么一個(gè)判斷,使得軟件更人性化,允許你發(fā)送前最后做一次考慮,再做決定。
應(yīng)該有兩種解決方法:
一:看看軟件設(shè)置,有沒(méi)有取消提醒之類的選擇。
二:修改軟件程序,把判斷部分去掉。(這個(gè)可能性不大,必須知道軟件源碼才行)。
也有可能是手機(jī)本身的設(shè)置問(wèn)題。由于我沒(méi)有用過(guò)你的手機(jī) ,無(wú)法做出判斷。
你可以做一個(gè)簡(jiǎn)單測(cè)試,不通過(guò)群發(fā)短信軟件,用手機(jī)直接群發(fā),看看有沒(méi)有這個(gè)問(wèn)題。
如果同樣有提示,看看手機(jī)設(shè)置里面能否更改。
做鏡像是使用recovery來(lái)做的吧?就等于電腦做ghost。androidsms就是手機(jī)發(fā)送信息的自帶應(yīng)用。你做了鏡像之后,用他給的軟件,在電腦里打開(kāi)相關(guān)鏡像,然后進(jìn)入androidsms這個(gè)文件夾,里面就有你需要找的東西了。
因?yàn)榍懊娌糠植皇呛芮宄?,不知道你用的什么軟件,所以沒(méi)法詳細(xì)說(shuō)。大致就是用usb連接手機(jī),然后使用recovery之類的軟件備份,備份后進(jìn)入鏡像找到androidsms文件夾,找到相應(yīng)的txt,保存后,把鏡像修改后再把內(nèi)容還原,然后就可以刷機(jī)了。