用於跨進程共享數據。它提供了一套完整的方案,使得一個應用程序能夠訪問另外一個程序的數據,進行增刪改查。是Android進行跨進程共享數據的標準方式。 好比,咱們能夠開發本身的程序訪問系統的聯繫人列表、通話記錄、短信列表等,都是使用了 ContentProvider。java
若是咱們僅僅是獲取系統的一些數據,直接能夠經過調用 Context 的方法 getContentResolver()來獲取 ContentResolver 對象。而後再調用 ContentResolver 的增刪改查方法來操做數據。android
具體示例:Android獲取手機短信和通話記錄及通信錄數據庫
public class MyContentProvider extends ContentProvider {
public MyContentProvider() {
}
//初始化內容提供者的時候調用,能夠在裏面進行數據庫的建立、升級操做
//,返回 ture 則表明初始化完成。注意,只有當存在 ContentResolver
//嘗試訪問咱們程序中的數據時,內容提供者纔會被初始化
@Override
public boolean onCreate() {
return false;
}
//刪除數據,可使用URI來肯定刪除哪一張表中的數據,selection 和 selectionArgs 是約束條件。
@Override
public int delete(@NonNull Uri uri, String selection, String[] selectionArgs) {
return 0;
}
/插入數據
@Override
public Uri insert(@NonNull Uri uri, ContentValues values) {
return null;
}
//查詢數據
@Override
public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
return null;
}
//更新數據
@Override
public int update(@NonNull Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return 0;
}
//根據傳入的內容URI來返回相應的 MIME 類型
@Override
public String getType(@NonNull Uri uri) {
return null;
}
}
複製代碼
不難發現,基本上都是一些增刪改啥方法。app
<!--authorities 用於對不一樣應用進行區分的,爲了規範,通常都是使用包名進行命名, 其餘程序訪問咱們的數據,也是經過這個路徑進行訪問-->
<provider android:name=".contentprovider.MyContentProvider" android:authorities="com.sjc.myapplication.provider " android:enabled="true" android:exported="true" />
複製代碼
《第一行代碼.郭霖著》ide