Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
°²×¿µÚÊ®ËÄÌì±Ê¼Ç-ÄÚÈÝÌṩÕß(ContentProvider)
 
×÷ÕߣºÉ­ÁÖÉ­ À´×ÔÓÚ£º²©¿ÍÔ° ·¢²¼ÓÚ 2016-3-30
  1474  次浏览      27
 

1.ContentProvider¼ò½é

ContentProviderÊDz»Í¬Ó¦ÓóÌÐòÖ®¼ä½øÐÐÊý¾Ý½»»»µÄÒ»ÖÖ·½Ê½»òÕ߳Ʊê×¼API.

ContentProviderÒÔijÖÖUriµÄ·½Ê½¶ÔÍâÌṩÊý¾Ý,ÔÊÐíÆäËûÓ¦Ó÷ÃÎÊ»òÕßÐÞ¸ÄÊý¾Ý

ÆäËüµÄ³ÌÐò¸ù¾ÝUriÈ¥·ÃÎʲÙ×÷Ö¸¶¨µÄÊý¾Ý

2.Uri¼ò½é

http://www.qq.com:80/news.jsp

http://:URLµÄЭÒ鲿·Ö,ֻҪͨ¹ýHTTPЭÒéÀ´·ÃÎÊÍøÂç,Õâ¾ß²¿·ÖÊǹ̶¨µÄ.ÈçFTP

www.qq.com:ÓòÃû²¿·Ö

news.jsp:ÍøÕ¾×ÊÔ´²¿·Ö,·ÃÎʲ»ÄܵÄ×ÊÔ´Õâ¾ß²¿·ÖÊDz»Í¬µÄ,Õâ¸ö²¿·ÖÊǶ¯Ì¬µÄ

ContentProviderÒªÇóµÄ;UriÓëÉÏÃæÀàËÆ

content://com.pc.pp.provider/words

content://Õâ¸öAndroidµÄContentProvider¹æ¶¨µÄ,¾ÍÏñĬÈϵÄhttp://,ContentProviderµÄЭÒéĬÈϾÍÊÇContent://

com.pc.pp.provider:Õⲿ·Ö¾ÍÊÇContentProviderµÄauthorities.ϵͳ¾ÍÊÇÓÉÕâ¾ß²¿·ÖÀ´ÕÒµ½²Ù×÷ÄĸöContentProviderµÄ.Ö»Òª·ÃÎÊÖ¸¶¨µÄContentProvider,Õâ¸ö²¿·ÖÊǹ̶¨µÄ

words:×ÊÔ´²¿·Ö»òÕßÊý¾Ý

3.½¨Á¢ContentProvider

1.дһ¸öÀà¼Ì³ÐContentProviderÖØÐ´query,insert,update,delete,getTypeµÈ·½·¨

2.ÔÚAndroidManifest.xmlÖÐ×¢²áContentProvider,Ö¸¶¨

android:authoritiesÊôÐÔ //Õâ¸ö¸øÆäËüÓ¦ÓóÌÐòʹÓõÄ

½¨Á¢Ò»¸öÊý¾Ý°ïÖúÀà

public class BankSqliteOpenHelper extends SQLiteOpenHelper {

public BankSqliteOpenHelper(Context context) {
super(context, "bank.db", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table account(_id integer primary key, name varchar(30),money double)";
db.execSQL(sql);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


}

}

½¨Á¢Ò»¸öContentProvider

/**
±¾µØÊý¾Ý¿âµÄÄÚÈÝÌṩÕß,

@author Áõéª *

2016-3-2ÏÂÎç8:35:19 */ public class BankDbProvider extends ContentProvider {

private static final String TAG = "BankDbProvider";

private static final int ACCOUNT = 0;

private static final int ACCOUNT_ID = 1;
//ĬÈÏÆ¥Åä,²»ÄÜÆ¥Åä¾ÍÖ´ÐÐUriMatcher.NO_MATCH
private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
//Êý¾Ý¿â²Ù×÷Àà
private BankSqliteOpenHelper helper;

/**
* ³õʼʼ»¯Ò»Ð©¿ÉÒÔÆ¥ÅäµÄURI
*/
static {

matcher.addURI("com.itheima.bankdb.BankDbProvider", "account", ACCOUNT);
matcher.addURI("com.itheima.bankdb.BankDbProvider", "account/#",
ACCOUNT_ID);

}

/**
* Õâ¸öProvider±»´´½¨Ê±Ö´ÐÐ,×öһЩ³õʼʼ»¯²Ù×÷
*/
@Override
public boolean onCreate() {

helper = new BankSqliteOpenHelper(getContext());
return true;
}

/**
* ²éѯ²Ù×÷
*/
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {

if (matcher.match(uri) == ACCOUNT) {

SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.query("account", projection, selection,
selectionArgs, null, null, sortOrder);
return cursor;
} else if (matcher.match(uri) == ACCOUNT_ID) {

SQLiteDatabase db = helper.getReadableDatabase();
long id = ContentUris.parseId(uri);
Cursor cursor = db.query("account", null, "_id=?",
new String[] { id + "" }, null, null, sortOrder);
return cursor;
}
return null;
}

/**
* ·µ»ØÀàÐÍ,Ö÷ÒªÕë¶Ô²éѯ²Ù×÷
* vnd.android.cursor.dir:±íʾ·µ»Ø¶àÌõÊý¾Ý
* vnd.android.cursor.item:±íʾ·µ»ØÒ»ÌõÊý¾Ý
*/
@Override
public String getType(Uri uri) {

if (matcher.match(uri) == ACCOUNT) {
return "vnd.android.cursor.dir/account";
} else if (matcher.match(uri) == ACCOUNT_ID) {

return "vnd.android.cursor.item/account";
}

return null;
}

/**
* ²åÈë²Ù×÷
*/
@Override
public Uri insert(Uri uri, ContentValues values) {

if (matcher.match(uri) == ACCOUNT) {

SQLiteDatabase db = helper.getWritableDatabase();
long insert = db.insert("account", null, values);

db.close();
}
return uri;

}

/**
* ɾ³ý²Ù×÷
*/
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {

if (matcher.match(uri) == ACCOUNT) {

SQLiteDatabase db = helper.getWritableDatabase();

int delete = db.delete("account", selection, selectionArgs);

db.close();
return delete;
}
return 0;
}

/**
* ¸üвÙ×÷
*/
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {

if (matcher.match(uri) == ACCOUNT) {

SQLiteDatabase db = helper.getWritableDatabase();
int update = db.update("account", values, selection, selectionArgs);
db.close();
return update;
}
return 0;
}}

 

ÔÚÇåµ¥ÎļþÖÐ×¢²áÕâ¸öprovider

<!-- ×¢²áProvider 
authorities:¶ÔÍⱩ¶µÄ·ÃÎÊ·¾¶
-->
<provider
android:name="com.itheima.bankdb.provider.BankDbProvider"
android:authorities="com.itheima.bankdb.BankDbProvider" >
</provider>

authorities :¿ÉÒÔËæ±ã¶¨Òå,½¨Á¢Ê¹ÓðüÃû.Provider

4.·ÃÎÊÕâ¸öÓ¦ÓóÌÐòµÄProvider

н¨Ò»¸öÓ¦ÓÃ

ContentResolver resolver = getContentResolver();

ʹÓÃÕâ¸ö¶ÔÏóÀ´ÊµÏÖ¶ÔÏóPrivoiderµÄ½âÎö

/**
* ²åÈëÊý¾Ý
*
* @param v
*/
public void insert(View v) {
ContentResolver resolver = getContentResolver();

Uri uri = Uri.parse("content://com.itheima.bankdb.BankDbProvider/account");
ContentValues values = new ContentValues();
values.put("name", "lisi");
values.put("money", 503.3);
Uri insert = resolver.insert(uri, values);
System.out.println("insert:"+insert);
}

/**
* ¸üÐÂ
*
* @param v
*/
public void update(View v) {
ContentResolver resolver = getContentResolver();

Uri uri = Uri.parse("content://com.itheima.bankdb.BankDbProvider/account");
ContentValues values = new ContentValues();
values.put("money", 1003.3);

int update = resolver.update(uri, values, "name=?", new String[]{"lisi"});
System.out.println("update"+update);
}

/**
* ɾ³ý
*
* @param v
*/
public void delete(View v) {
ContentResolver resolver = getContentResolver();

Uri uri = Uri.parse("content://com.itheima.bankdb.BankDbProvider/account");

int delete = resolver.delete(uri, "name=?", new String[]{"lisi"});
System.out.println("delete:"+delete);
}

/**
* ²éѯȫ²¿
*
* @param v
*/
public void query(View v) {
ContentResolver resolver = getContentResolver();

Uri uri = Uri.parse("content://com.itheima.bankdb.BankDbProvider/account");
Cursor cursor = resolver.query(uri, null, null, null, null);

while(cursor.moveToNext()){
int id=cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));

double money =cursor.getDouble(cursor.getColumnIndex("money"));
Toast.makeText(this, "ID:"+id+"ÐÕÃû:"+name+",Money:"+money, Toast.LENGTH_SHORT).show();

}
cursor.close();
}

/**
* ²éѯһ¸ö
*
* @param v
*/
public void queryOne(View v) {
ContentResolver resolver = getContentResolver();

Uri uri = Uri.parse("content://com.itheima.bankdb.BankDbProvider/account/2");
Cursor cursor = resolver.query(uri, null, null, null, null);

while(cursor.moveToNext()){
int id=cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));

double money =cursor.getDouble(cursor.getColumnIndex("money"));
Toast.makeText(this, "ID:"+id+"ÐÕÃû:"+name+",Money:"+money, Toast.LENGTH_SHORT).show();

}
cursor.close();
}

5.ʹÓöÌÐŵÄÄÚÈÝÌṩÕß

Ïò¶ÌÐÅÖÐÌí¼ÓÒ»ÌõÊý¾Ý

/**
* Ïñ¶ÌÐÅÖÐÌí¼ÓÒ»ÌõÊý¾Ý
* @param v
*/
public void insert(View v){
//»ñÈ¡ÄÚÈݽâÎö¶¼
ContentResolver resolver = getContentResolver();
//²é¿´Ô´ÂëÖÐÕÒµ½ÌṩµÄuri
Uri uri =Uri.parse("content://sms");
//ÒªÌí¼ÓµÄÊý¾Ý¾ÍÊÇÒ»¸öMAP¼¯ºÏ,¶ÔÓ¦µÄÊý¾Ý±íµÄ×Ö¶Î
ContentValues values = new ContentValues();
values.put("address", "10086");
values.put("date", System.currentTimeMillis());
values.put("body", "ÕâÊÇÒ»ÌõеĶÌÐÅ");
values.put("type", 1);
resolver.insert(uri, values);

}

Ìí¼ÓȨÏÞ

<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>

6.ʹÓÃÁªÏµÈËContentProvider

²éѯÁªÏµÈË

/**
* ²éѯËùÓÐÁªÏµÈË,
* @param context
* @return
*/
public static List<ContactInfo> getContacts(Context context){
List<ContactInfo> list = new ArrayList<ContactInfo>();
Uri rowUri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");

ContentResolver resolver = context.getContentResolver();

Cursor rawCursor = resolver.query(rowUri, new String[]{"contact_id"}, null, null, null);
while(rawCursor.moveToNext()){
String id =rawCursor.getString(rawCursor.getColumnIndex("contact_id"));
if(id==null){
continue;
}
ContactInfo info = new ContactInfo();
info.id=id;
Cursor dataCursor= resolver.query(dataUri, new String[]{"data1","mimetype"}, "raw_contact_id=?", new String[]{id}, null);
while(dataCursor.moveToNext()){
String data1=dataCursor.getString(dataCursor.getColumnIndex("data1"));
String mimetype=dataCursor.getString(dataCursor.getColumnIndex("mimetype"));

if("vnd.android.cursor.item/email_v2".equals(mimetype)){
info.email=data1;
}else if("vnd.android.cursor.item/im".equals(mimetype)){
info.im=data1;
}else if("vnd.android.cursor.item/phone_v2".equals(mimetype)){
info.phone=data1;
}else if("vnd.android.cursor.item/name".equals(mimetype)){
info.name=data1;
}
}
dataCursor.close();
list.add(info);
}
rawCursor.close();
return list;
}

Ìí¼ÓÁªÏµÈË

 /**
* Ìí¼ÓÁªÏµÈË
*
* @param v
*/
public void insert(View v) {
String name = etName.getText().toString().trim();
String phone = etPhone.getText().toString().trim();
String email = etEmail.getText().toString().trim();

if (TextUtils.isEmpty(name) || TextUtils.isEmpty(phone)
|| TextUtils.isEmpty(email)) {
Toast.makeText(this, "Ãû×Ö,µç»°,Óʼþ²»ÄÜΪ¿Õ", Toast.LENGTH_SHORT).show();
return;
}

Uri rowUri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");
// ÏȲéѯID
ContentResolver resolver = getContentResolver();

Cursor rawCursor = resolver.query(rowUri, new String[] { "_id" }, null,
null, null);
rawCursor.moveToLast();
int id = 1;
id = rawCursor.getInt(rawCursor.getColumnIndex("_id")) + 1;
rawCursor.close();
// ²åÈëraw_contact±íID
ContentValues values = new ContentValues();
values.put("contact_id", id);
resolver.insert(rowUri, values);
// Ïòdata±íÖвåÈëÊý¾Ý
ContentValues nameValues = new ContentValues();
nameValues.put("data1", name);
nameValues.put("mimetype", "vnd.android.cursor.item/name");
nameValues.put("raw_contact_id", id);
resolver.insert(dataUri, nameValues);

ContentValues phoneValues = new ContentValues();
phoneValues.put("data1", phone);
phoneValues.put("mimetype", "vnd.android.cursor.item/phone_v2");
phoneValues.put("raw_contact_id", id);
resolver.insert(dataUri, phoneValues);

ContentValues emailValues = new ContentValues();
emailValues.put("data1", email);
emailValues.put("mimetype", "vnd.android.cursor.item/email_v2");
emailValues.put("raw_contact_id", id);
resolver.insert(dataUri, emailValues);

Toast.makeText(this, "Ìí¼Ó³É¹¦", Toast.LENGTH_SHORT).show();
}

Ìí¼ÓȨÏÞ

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

7.ÄÚÈݹ۲ìÕß

ContentObserver ¹Û²ìijһ¸ö·¾¶µÄÊý¾Ý£¬ ij¸öÖ¸¶¨µÄÊý¾Ý£¬Ò»µ©Êý¾Ý·¢ÉúÁ˱仯£¬ÄÇô½«»áÊÕµ½Í¨Öª

×÷Ó㺠Êý¾Ý¿âµÄÊý¾Ý·¢Éú±ä»¯Ö®ºó£¬»á·¢²¼Ò»¸ö֪ͨ³öÀ´£¬ÎÒÃÇÊÕµ½Í¨ÖªÖ®ºó£¬ÔÙÈ¥²éѯÊý¾Ý¿â£¬¼´¿ÉµÃµ½×îеÄÊý¾Ý

·¢²¼Í¨Öª

//²ÎÊýÒ»£º ¾ßÌåÊÇʲôλÖõÄÊý¾Ý·¢ÉúÁ˸ıä
//²ÎÊý¶þ£º¾ßÌåµÄÄÚÈݹ۲ìÕß¶ÔÏó£¬ Èç¹ûÊÇnull , ÄÇô±íÃ÷²»¸æËß¾ßÌåµÄijһ¸öÈË£¬
getContext().getContentResolver().notifyChange(uri, null);

ÊÕµ½Í¨Öª

//×¢²áÄÚÈݹ۲ìÕß

Uri uri = Uri.parse("content://com.itheima.bank.BACKDOOR/account");
//²ÎÊýÒ»£º ¹Û²ìµÄ¾ßÌåλÖà £¬uri
//²ÎÊý¶þ£º true : uriֻҪƥÅäǰ°ë¶Î£¬Ò²ÄÜÊÕµ½Í¨Öª£¬ false . ËùÓеÄ×Öĸ¶¼È«²¿Æ¥Åä²ÅÄÜÊÕµ½Í¨Öª
getContentResolver().registerContentObserver(uri, true, new MyObserver(new Handler()));

class MyObserver extends ContentObserver{

public MyObserver(Handler handler) {
super(handler);
}

@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.d(TAG, "±íÊý¾Ý·¢ÉúÁ˸ıä..");
}
}

   
1474 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ

ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ