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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android读取短信和联系人

發布時間:2025/3/20 Android 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android读取短信和联系人 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

讀取短信和聯系人經常會用到,要了解的是這是內容提供者(contentProvider)的知識點,大家都知道數據庫是在data-->data 對應的包目錄下,其他應用是不可以訪問到的,如果有些數據要提供給其他的應用,比如通信錄,其他應用想獲取它的數據怎么辦呢,這時內容提供者就出現了,預先寫好了一些操作數據庫的方法,因為方法是開發這個應用的開發者提供的,所以保證了數據庫的安全操作,又能共享數據。

短信

開始切入正題,先說短信,要從數據庫中獲取數據,就要了解其結構

短信數據庫在data-->data中的下面路徑

它的表結構如下,有3個是我們要注意的,這3個是我們待會要用到的,其中date是毫秒值

Java代碼為

     //獲取內容提供者ContentResolver contentResolver = getContentResolver();//獲取短信表的路徑Uri uri = Uri.parse("content://sms");//設置要查詢的列名String[] line = {"address", "date", "body"};//各個參數的意思,路徑、列名、條件、條件參數、排序Cursor cursor = contentResolver.query(uri, line, null, null, null);//下面就跟操作普通數據庫一樣了if (cursor != null) {while (cursor.moveToNext()) {String address = cursor.getString(cursor.getColumnIndex("address"));String date = cursor.getString(cursor.getColumnIndex("date"));String body = cursor.getString(cursor.getColumnIndex("body"));Log.e("短信", "address:" + address + "\ndate:" + date + "\nbody:" + body);}cursor.close();}

聯系人

獲取聯系人就比較復雜了,其表結構也比較復雜,我們獲取聯系人的姓名、電話號碼、郵箱,要通過3張表去提取

數據庫所在位置data-->data中的下面路徑

data表,這個表中的“data1”列幾乎包含了我們想要的數據,但是如何通過分類提取,第四列的代號說明了data1數據的類型,這些代號在mimetypes表中有對應的說明,要找到這些數據,又要通過raw_contact_id去查找,這些ID又來于raw_contacts表中

?

mimetypes表,對代號類型的說明

?raw_contacts表,我們通信錄中要顯示的信息必須要在這里找到對應的ID,當我們刪除了聯系人,data表中的數據并沒有刪除,只是刪除了證張表contact_id變為null,而不是真的刪除

了解其表結構后,就開始寫代碼了

//獲取內容提供者ContentResolver contentResolver = getContentResolver();//獲取raw_contacts表的路徑Uri raw_contact_uri = Uri.parse("content://com.android.contacts/raw_contacts");//各個參數的意思,路徑、列名、條件、條件參數、排序Cursor contactId = contentResolver.query(raw_contact_uri, new String[]{"contact_id"}, null, null, null);//下面就跟操作普通數據庫一樣了if (contactId != null) {while (contactId.moveToNext()) {//獲取contact_id的值,它對應data表中raw_contact_id的值String id = contactId.getString(contactId.getColumnIndex("contact_id"));//獲取data表的路徑Uri data_uri = Uri.parse("content://com.android.contacts/data");//各個參數的意思,路徑、列名、條件、條件參數、排序Cursor dataCursor = contentResolver.query(data_uri, new String[]{"mimetype", "data1"},"raw_contact_id=?", new String[]{id}, null);if (dataCursor != null) {//每次循環創建一個實例用于保存data表中的數據ContactsData contactsData = new ContactsData();while (dataCursor.moveToNext()) {String type = dataCursor.getString(dataCursor.getColumnIndex("mimetype"));switch (type) {case "vnd.android.cursor.item/email_v2"://這是郵箱信息contactsData.setEmail(dataCursor.getString(dataCursor.getColumnIndex("data1")));break;case "vnd.android.cursor.item/phone_v2"://這是手機號碼信息contactsData.setNumber(dataCursor.getString(dataCursor.getColumnIndex("data1")));break;case "vnd.android.cursor.item/name"://這是聯系人的名字contactsData.setName(dataCursor.getString(dataCursor.getColumnIndex("data1")));break;}}//把查詢到的信息添加到集合中 contactsDatas.add(contactsData);dataCursor.close();}}contactId.close();}Log.d("測試","開始打印");for (ContactsData c : contactsDatas) {Log.e("聯系人", c.toString());}

為了方便管理創建一個Javabean

public class ContactsData {private String email;private String number;private String name;public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "ContactsData{" +"email='" + email + '\'' +", number='" + number + '\'' +", name='" + name + '\'' +'}';} }

最后別忘了加上權限

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

如過是Android 6.0以上的版本還要動態獲取權限

?獲取聯系人的效果圖

真正應用

通常不會這樣直接寫它的路徑的,因為手機廠商會修改它的路徑,還是這樣寫的話會報錯,說不存在這一列,需要使用Android提供的API

     /*** 通過ContactsContract.Contacts.CONTENT_URI來獲取_ID和DISPLAY_NAME* _ID 該聯系人的索引* 通過這個ID可以在ContactsContract.CommonDataKinds.Phone.CONTENT_URI 中找到該聯系人的電話號碼* 通過這個ID可以在ContactsContract.CommonDataKinds.Email.CONTENT_URI 找到該聯系人的郵箱* DISPLAY_NAME 是該聯系人的姓名*/Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);if (cursor != null) {while (cursor.moveToNext()) {ContactsData contactsData = new ContactsData();//獲取該聯系人的IDString contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));//該聯系人的姓名String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));contactsData.setName(name);/*** 查找該聯系人的phone信息* 在ContactsContract.CommonDataKinds.Phone.CONTENT_URI 中查詢* 條件為ContactsContract.CommonDataKinds.Phone.CONTACT_ID = 上面查詢到的ID*/Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId, null, null);if (phones != null && phones.moveToNext()) {//獲取該聯系人的手機號碼String number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));contactsData.setNumber(number);phones.close();}/*** 查找該聯系人的email信息* 在ContactsContract.CommonDataKinds.Email.CONTENT_URI 中查詢* 條件為ContactsContract.CommonDataKinds.Phone.CONTACT_ID = 上面查詢到的ID*/Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + "=" + contactId, null, null);if (emails != null && emails.moveToNext()) {//獲取該聯系人的郵箱String email = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));contactsData.setEmail(email);emails.close();}contactsDatas.add(contactsData);}cursor.close();}Log.d("測試","開始打印");for (ContactsData c : contactsDatas) {Log.e("聯系人", c.toString());}

看起來好像有點復雜,我們先看看下面的圖片再去看代碼,可能會容易理解,這些代碼一共操作了3個表,嚴格來說是視圖,在這3個表中獲得他們共同的ID,根據ID在這3個表中分別提取對應的姓名、電話號碼、郵箱

?

項目源代碼:http://download.csdn.net/download/qq_33200967/9929430

?

轉載于:https://www.cnblogs.com/yeyupiaoling/p/7286544.html

總結

以上是生活随笔為你收集整理的Android读取短信和联系人的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 麻豆小视频 | 性少妇xxxxx 亚洲一卡二卡在线观看 | 国产91精选 | 一本色道久久88综合无码 | 精品一区二区免费看 | 亚洲视频www | 波多野结衣视频免费 | 国产成人亚洲精品无码h在线 | 94av视频| 黄色一级免费看 | 可以免费看污视频的网站 | 国产一区二区毛片 | 狠狠综合一区 | 国产二区三区视频 | 亚洲区一区二区三区 | 日韩欧美超碰 | 亚洲你我色 | 国产51页 | 国产污片在线观看 | 最新91视频| 爱色成人网 | 日日操夜夜撸 | 精品久久久久久无码人妻 | 五月天婷婷爱 | 成人3d动漫一区二区三区91 | 国产三级在线免费 | 三级免费黄录像 | 欧美激情久久久久 | 影音先锋天堂网 | 爱逼综合 | 在线观看福利片 | 国产福利在线观看 | 精品国产一区二区三区四区 | 先锋影音av资源在线 | 狠狠爱天天干 | 国产av成人一区二区三区高清 | 日本高清www | 国产四区| 免费观看一区二区三区视频 | 一区二区三区四区五区在线视频 | av天堂一区二区 | 亚洲精品久久一区二区三区777 | 欧美夫妇交换xxx | 青青草国产在线视频 | 久久婷婷五月国产色综合激情 | 色五婷婷 | 中文在线观看免费高清 | 亚洲精品乱码久久久久久蜜桃欧美 | 日本免费不卡视频 | 超碰999 | 青青草社区 | 黄色一级带 | 97超碰资源总站 | 一级免费在线观看 | 网站一级片 | 美女娇喘 | 91精品婷婷国产综合久久竹菊 | 精品人妻一区二区三区换脸明星 | www日本com| 国产美女永久免费 | 天堂а√在线中文在线新版 | 黄大片18满岁 | 国产夫妇交换聚会群4p | 欧美一区欧美二区 | 男男一级淫片免费播放 | 亚洲 欧美 激情 另类 校园 | 久草热线 | 美女被变态侵犯 | 男男做性免费视频网 | 91老师国产黑色丝袜在线 | 狠狠艹狠狠干 | 欧美一级特黄视频 | 欧美日韩一级片在线观看 | 成人爱爱网站 | 国产制服丝袜在线 | 色翁荡息又大又硬又粗又爽 | 一区=区三区乱码 | 美国黄色片网站 | 国产又黄又猛 | 综合久久一区 | 欧美精品入口蜜桃 | 国产精品入口日韩视频大尺度 | 可以免费在线观看的av | 黄色爱爱视频 | 91香蕉久久 | 国产综合视频一区二区 | 久草网在线观看 | 97福利视频 | 天堂网8 | 久久免费视频一区二区 | 亚洲剧情在线 | 一区不卡av | 成人免费看片'在线观看 | 亚洲a视频在线观看 | 青草久久久| 最新免费av网站 | 亚洲国产日韩精品 | 欧美福利一区二区 | 亚洲女人初尝黑人巨大 |