天天看点

android api code 学习之provider包

最近几天看了下android.provider包.这个包下的类都是一些获取sqliet3中存储的信息的provider.主要有获取联系人信息的(android.provider.ContactsContract)获取通话记录(android.provider.CallLog),获取设置信息(android.provider.Settings),获取存储的media信息(android.provider.MediaStore)(我主要就看了这四个类,当然还有其它的),信息的获取是通过构造游标(cursor)实现的.我感觉游标的构造就是通过一些方法来构造sql语句.

下面是我写CallLog的简单demo的代码片段:

Uri uri = Calls.CONTENT_URI;
        String[] projections = new String[]{
        	Calls._ID,
        	Calls.NUMBER,
        	Calls.TYPE
        };
        
        String selections = null;
        
        String[] selectionsArgs = null;
        
        String sortOrder = null;
        
        Cursor cursor = this.managedQuery(uri, projections, selections, selectionsArgs, sortOrder);
        
        int count = -1;
        
        if(cursor != null){
        	count = cursor.getCount();
        }
        if(count > 0){
        	for(int i = 0;i<count ;i++){
        		cursor.moveToNext();
        		String s0 = cursor.getString(0);
        		String s1 = cursor.getString(1);
        		String s2 = cursor.getString(2);
        	}
        }
           

 Uri是要查询的table的url,projection是要查询的字段,selections相当于where条件部分,selectionArgs是where条件的值,最后sortOrder是order by 部分.下面是条日志中截取的sql语句(这条语句是在写ContactsContract练习时专门定义错误的方法后打出来的日志,正确整不出来,嘿嘿,不知道有没有别的设置)

SELECT _id,
       display_name,
       data1,
       data3,
       mimetype,
       contacts_status_updates.status_label AS contact_status_label
  FROM view_data_restricted data
  LEFT OUTER JOIN status_updates contacts_status_updates ON (status_update_id =
                                                            contacts_status_updates.status_update_data_id)
 WHERE (1)
   AND (vnd.android.cursor.dir / data = 'vnd.android.cursor.item/im')
           

在获取ContactsContract信息时,可以通过ContactsContract.Data的CONTENT_URI查询可以查到通讯中的所有信息,也可以通过一些专有的Uri进行获取专门的信息如Phone,Email等(但是我感觉完全没必要,有Data的Uri完全足够,经过selections过滤掉就可以了);在获取Media信息时有EXTERNAL_CONTENT_URI,INTERNAL_CONTENT_URI之分;Setting信息主要包含了安全(secure)和系统(system)设置,都有相应的CONTENT_URI,具体的在用的时候查看下api就明白了。当然在这个包下还有android.provider.LiveFolders,android.provider.UserDictionary等类。