編輯:Android開發實例
在Android應用中讀取彩信文件涉及到Android的一個數據庫/data/data /com.android.providers.telephony/databases/mmssms.db和一個文件夾/data/data /com.android.providers.telephony/app_parts。要備份彩信,可以將這個數據庫和文件夾拷貝到硬盤,但是在應用中卻不能通過openDatabase系列方法來讀這個數據庫,也不能通過直接打開文件來讀取附件文件,因為你的應用不是它們的所有者,不能直接讀取,而要使用ContentProvider來讀取。
1、讀取mmssms.db數據庫
彩信的標題、發送者號碼、日期等數據存儲在mmssms.db的pdu表中,要讀取這個表可以使用系統提供的一個ContentProvider,URI 是“content://mms”。操作這個ContentProvider和操作數據庫一樣,這個ContentProvider的結構也和pdu表的結構一樣,Android文檔對這些字段沒有說明,但是可以通過將mmssms.db數據庫備份到硬盤上,然後再通過Sqlite Database Browser軟件來查看分析,具體可參考:http://www.blogjava.net/easywu/archive/2010/01/10/308959.html。
content://mms主要的幾個字段如下:
◆ _id:該條彩信的主鍵,對應著part表(ContentProvider的URI是content://mms/part,詳見後)中的mid字段。
◆sub:該條彩信的標題
◆date:該條彩信的接收日期
下面的代碼可以查詢該CotnetProvider,得到一個cursor,並列出所有的列名。
- Cursor cur = getContentResolver().query(Uri.parse("content://mms"),null, null, null, null);
- String [] temp=cur.getColumnNames();
- for (int i=0;i<temp.length;i++)
- System.out.println(i+":"+temp);
通過上面的方法得到cursor後,就可以對這個cursor操作,並通過get方法得到_id,然後根據這個_id讀取彩信附件文件。
2、讀取彩信附件文件
彩信附件文件的地址存儲在mmssms.db的part表的_data字段,形如“/data/data /com.android.providers.telephony/app_parts/PART_1262693697763”,但在應用中讀取彩信附件時,這個字段基本沒什麼用,因為不能直接讀取這個文件。讀取同樣要通過ContentProvider,URI為“content://mms /part”,該URI就是對應著part表。可以使用下列代碼段來讀取文件:
- String selection = new String("mid='" + key + "'");//這個key就是pdu裡面的_id。
- Cursor cur = getContentResolver().query(Uri.parse("content://mms/part"), null, selection, null, null);
- if (cur.moveToFirst())
- do {
- int _partID = cur.getInt(cur.getColumnIndex("_id"));
- String partID = String.valueOf(_partID);
- Uri partURI = Uri.parse("content://mms/part/" + partID);
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- InputStream is = null;
- try {
- is = getContentResolver().openInputStream(partURI);
- byte[] buffer = new byte[256];
- int len = is.read(buffer);
- while (len >= 0)
- {
- baos.write(buffer, 0, len);
- len = is.read(buffer);
- }
- } catch (IOException e) {
- } finally {
- if (is != null) {
- try {
- is.close();
- } catch (IOException e) {
- }
- }
- }
- }
這裡得到的baos,就是附件文件。
3、聲明permission
要在代碼中使用content://mms,content://mms/part,content://sms等,還要在 AndroidManifest.xml中注冊premission,代碼如下:
1、Service的種類 按運行地點分類: 類別 區別 優點 缺點 應用 本地服務(Local) 該服務依附在主進程
在應用程序中有些時候,如果想詢問用戶采取決定是或否所采取的特殊動作的回應,由停在原來的活動而不改變屏幕,可以使用警告對話框(Alert Dialog)。要使用一個警告對話
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我