一是使用內容提供器讀取和操作其他應用程式的資料
二是建立內容提供器給該程式的資料提供外部訪問介面
如**簿,簡訊,**庫,都有內容提供器讓它們的資料有外部訪問介面
內容提供器提供的資料外部訪問介面是乙個uri.它由authority和path組成
path相當於不同的表加在authority的後面。如有表table1,table2
然後還要加上協議宣告:所以標準的內容uri格式如下:
上面的只是字元物件,要轉化成uri物件:
cursor cursor = getcontentresolver().query(
uri,
projection, //欄位名,列名,column1,column2
selection, //查詢條件 where column = value(?)佔位符
value, //佔位符具體的值
sortorder //排序方式, 例如 order by column1
);
if (cursor != null)
cursor.close();
}
contentvalues values = new contentvalues();
values.put("column1" , "text");
values.put("colum2" , 2);
getcontentresolver().insert(uri , values);
contentvalues values = new contentvalues(); //更新之後的新值
values.put("column1" , "1"); //更新之後的新值
values.put("colum2" , 0); //更新之後的新值
//根據條件將 新值替換掉舊值
getcontentresolver().insert(uri , values , "column1 = ? and column2 = ?" , new string);
//根據條件刪除某條資料
getcontentresolver().delete(uri , "column2 = ?" , new string);
手機聯絡人的uri:
contactscontract.commondatakinds.phone.content_uri提供的字段有 name 和 手機號
contactscontract.commondatakinds.phone.display_name想要獲取name 和 手機號,需要加許可權,還要動態申請許可權contactscontract.commondatakinds.phone.number
read_contacts
兩個常用uri如下:
* : 表示匹配任意長度的任意字元
# : 表示匹配任意長度的數字
乙個完整的例子如下:
public class mycontentprovider extends contentprovider
private mydatabasehelper dbhelper; //自己應用程式的sqlite幫助類
public mycontentprovider()
@override
public boolean oncreate()
@override
public cursor query(uri uri, string projection, string selection,
string selectionargs, string sortorder) , null , null , sortorder);
break;
default:
break;
}return cursor;
}@override
public uri insert(uri uri, contentvalues values)
return urireturn;
}@override
public int update(uri uri, contentvalues values, string selection,
string selectionargs) );
break;
default:
break;
}return updateids;
}@override
public int delete(uri uri, string selection, string selectionargs) );
break;
default:
break;
}return deleteids;
}@override
public string gettype(uri uri)
return null;
}}
理解**:
public class myprovider extends contentprovider
@nullable
@override
public cursor query(uri uri, string projection, string selection, string selectionargs, string sortorder)
@nullable
@override
public string gettype(uri uri)
@nullable
@override
public uri insert(uri uri, contentvalues values)
@override
public int delete(uri uri, string selection, string selectionargs)
@override
public int update(uri uri, contentvalues values, string selection, string selectionargs)
}
如何新增Content Provider
一 寫在前面 一直很好奇系統是如何通過 content 來訪問歸屬地資料庫的,通過研究 和api參考文件以及網路上的資料基本上弄明白了,於是有了以下的內容。二 android content provider介紹 三 content provider的組成 四 新增content provider ...
ContentProvider基本使用
在不同應用之間實現資料共享,並保證安全性 比較 新增 沒有條件約束,刪除 沒有資料contentvalues getcontentresolver insert uri uri,contentvalues values getcontentresolver update uri uri,conten...
使用ContentProvider共享資料
當應用繼承contentprovider類,並重寫該類用於提供資料和儲存資料的方法,就可以向其他應用共享其資料。以前我們學習過檔案的操作模式,通過指定檔案的操作模式為context.mode world readable 或context.mode world writeable同樣可以對外共享資料...