Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android ApiDemo示例解讀系列之十:App

Android ApiDemo示例解讀系列之十:App

編輯:Android開發實例

  QuickContactsDemo示例介紹了如果使用Content Provider來訪問Android系統的Contacts 數據庫。

  Content Provider為不同應用之間共享數據提供了統一的接口,通過對底層數據源的抽象,Content Provider實現了應用程序代碼和數據層分離。Android平台對大部分的系統數據庫都提供了對應的Content Provider接口:

  Browser: 讀取和修改Bookmark,Browser history或Web Searches。

  CallLog: 查看或是更新Call History(打入電話或是打出電話,未接電話等)

  Contacts: 檢索,修改或存儲通訊錄。

  MediaStore: 訪問媒體庫(包括聲音,視頻,圖像等)。

  Settings: 訪問系統設置,查看或是修改藍牙設置,鈴聲設置等。

  Android系統的每個Content Provider都定義了一個CONTENT_URI,功能類似於數據庫的名稱。Android中每個Context對象(如Activity)對含有一個ContentResolver,ContentResolver可以根據CONTENT_URI獲取對應的Content Provider:

Java代碼
  1. public void onCreate(Bundle savedInstanceState) {    
  2.  super.onCreate(savedInstanceState);    
  3.  String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("    
  4.  + Contacts.HAS_PHONE_NUMBER + "=1) AND ("    
  5.  + Contacts.DISPLAY_NAME + " != '' ))";    
  6.  Cursor c =    
  7.  getContentResolver().query(Contacts.CONTENT_URI,    
  8.  CONTACTS_SUMMARY_PROJECTION,    
  9.  select,    
  10.  null,    
  11.  Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");    
  12.  startManagingCursor(c);    
  13.  ContactListItemAdapter adapter    
  14.       = new ContactListItemAdapter(this,    
  15.       R.layout.quick_contacts, c);    
  16.  setListAdapter(adapter);    
  17.      
  18. }   

  getContentResolver() 取的ContentResolver對象,它的Query方法定義如下:

  public final Cursorquery(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

  Uri: 需要訪問的Content Provider對應的URI,如通訊錄的URI為Contacts.CONTENT_URI。

  Projection: 需要返回的表的列名,如為NULL,則返回表的全部列。

  Selection: 查詢數據表的條件,相當於SQL 的Where語句。

  selectionArgs: 相當於SQL查詢條件的查詢參數?

  sortOrder:  相當於SQL查詢的Order語句,查詢排序,為空時,返回記錄的缺省順序。

  可以看得出,Content Provider和 數據庫的用法非常類似。query返回的對象為Cusor ,有Cursor對象後就可以和訪問數據庫表一樣來insert ,delete ,update 數據庫。

  startManagingCursor(c); 讓Activity來管理cursor 的生命周期。

  此外訪問Content Provider還需要合適的權限才能正確訪問,比如讀寫通訊錄,需要在AndroidManifest.xml設置:

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

  <uses-permission android:name=”android.permission.WRITE_CONTACTS” />

  才能有權限訪問通信錄。

Android ApiDemo示例解讀系列之九:App->Activity->QuickContactsDemo

  注:如果在模擬器上運行這個示例,需要在Contacts添加幾個Contacts,否則這個例子沒有顯示。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved