應用程式建立的資料庫預設都是私有的,別的應用程式不可以訪問裡面的資料。如果有需求把自己應用程式私有的資料庫暴露給別的使用者,就需要使用內容提供者
a應用中
1,建立資料庫bankdbopenhelper
public
class
bankdbopenhelper
extends
sqliteopenhelper
@override
public
void
oncreate(sqlitedatabase db)
@override
public
void
onupgrade(sqlitedatabase db, int oldversion, int newversion)
}
2,建立類bankdbbackdoor繼承內容提供者
public
class
bankdbbackdoor
extends
contentprovider
@override
public
boolean
oncreate()
@override
public uri insert(uri uri, contentvalues values) else
return
null;
}@override
public
intdelete(uri uri, string selection, string selectionargs) else
return
0; }
@override
public
intupdate(uri uri, contentvalues values, string selection,
string selectionargs) else
return
0; }
@override
public cursor query(uri uri, string projection, string selection,
string selectionargs, string sortorder) else
}@override
public string gettype(uri uri)
}
3,在清單檔案中註冊內容提供者
"com.example.day09_01_contentprovider.bankdbbackdoor"
//必須配置該主機名,訪問者使用該主機名才能訪問
android:authorities="com.test.bank"
//是否支援其它應用呼叫當前元件
android:exported="true">
3,在mainactivity中建立資料庫
public
class
mainactivity
extends
activity
}
b應用中
呼叫a中的增刪改查方法
public
class
mainactivity
extends
activity
/*** 在介面上新增增刪改查的方法
*@param view
*///銀行行長利用後門新增資料
public
void
insert(view view)
public
void
delete(view view));
}public
void
update(view view));
}public
void
query(view view), null, null, null);
while (cursor.movetonext())
cursor.close();
}}
1,檢視資料庫,分析資料庫的表和字段
2,操作內容提供者需要uri
3,找到系統應用的源**,首先去清單檔案中查詢主機名authorities
"smsprovider"
android:authorities="sms"
android:multiprocess="true"
android:readpermission="android.permission.read_sms"
android:writepermission="android.permission.write_sms" />
4,去對應的provider的源**中查詢匹配規則,確定表名
static
5,根據主機名和表名確定uri,使用contentresolver的增刪改查方法操作對應的資料庫
public
class
mainactivity
extends
activity
//向內容提供者中新增資料
public
void
add(view view)
//刪除內容提供者中資料
public
void
delete(view view));
}}
raw_contact:聯絡人的id表
contact_id 儲存聯絡人的id
data:聯絡人的資料表
rawcontactid 表示屬於哪個聯絡人
data1 具體的資料
mimetype_id 資料的型別,使用該id去mimetypes表中查詢資料型別
mimetypes:聯絡人的資料型別表
如何讀取聯絡人資料contentresolver resolver = getcontentresolver();
//1.查詢raw_contact表,獲取所有聯絡人
id uri uri = uri.parse("content:");
uri datauri = uri.parse("content:");
cursor cursor = resolver.query(uri, new string, null, null, null);
while(cursor.movetonext()), "raw_contact_id=?", new string, null);
while(datacursor.movetonext())
datacursor.close();
system.out
.println("------------");
} cursor.close();
備註:加上read_contacts許可權
內容觀察者一般用於觀察系統資料庫的變化
使用例項:在其他應用中:
public
class
mainactivity
extends
activity
});}
}
Android基礎 內容提供者
google設計內容提供者的目的 為外部應用程式提供了統一的訪問資料庫的方式。編寫乙個內容提供者的步驟 1 在工程中新增乙個內容提供者的類,繼承了contentprovider型別,實現了增刪改查的方法 2 在清單檔案中配置乙個provider節點,指定authorities 相當於 的網域名稱,用...
android內容提供者
android四大元件之一,用於跨應用資料共享,我們自己的應用可以通過使用contentprovider機制獲取聯絡人資訊,簡訊,庫等資訊。不要以為只能運算元據庫資料。用getcontentresolver query insert update delete 等方法對錶進行操作 如 獲取聯絡人名字...
Android內容提供者
一 為什麼需要內容提供者元件 使用內容提供者把私有的資料庫內容暴露出來 原理 1.內容提供者把資料進行封裝,然後提供出來,其他應用都是通過內容解析者來訪問 2.定義內容提供者,定義乙個類繼承contentprovider 二 實現內容提供者步驟 1.定義乙個類繼承 contentprovider 2...