Android开发总结笔记 四大组件之ContentPovider(上) 1-2-8
来源:互联网 发布:js获取整个form的值 编辑:程序博客网 时间:2024/05/01 00:34
content://com.example.provider.myprovider/words/4
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
Uri uri = Uri.parse("content://sms/");
ContentResolver contentResolver = getContentResolver();
String[] column={"address", "date", "type", "body"};
Cursor cursor = contentResolver.query(uri,column, null, null, null);
while (cursor.moveToNext()) {
String address = cursor.getString(0);
String date = cursor.getString(1);
String type = cursor.getString(2);
String body = cursor.getString(3);
Log.i("地址", address);
Log.i("日期", date);
Log.i("类型", type);
Log.i("主体", body);
}
cursor.close();
}
}
<uses-permission android:name="android.permission.READ_SMS"/>
- uri 这个不用说了,就是一个路径
- projection 需要查询的列对应的字符串数组
- selection SQL中的选择语句(where)
- selectionArgs 此处匹配选择语句的带有"?"的地方
ContentUris.withAppendedId(uri,1);
增
咱们来插入一个联系人
方式①
ContentValues values = new ContentValues();
//首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
Uri rawContactUri = getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
//往data表入姓名数据
values.clear();
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "zhangsan");
getContentResolver().insert(
android.provider.ContactsContract.Data.CONTENT_URI, values);
//往data表入电话数据
values.clear();
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "13800138000");
values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
getContentResolver().insert(
android.provider.ContactsContract.Data.CONTENT_URI, values);
//往data表入Email数据
values.clear();
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Email.DATA, "10000@qq.com");
values.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
getContentResolver().insert(
android.provider.ContactsContract.Data.CONTENT_URI, values);
方式②
//使用事务添加联系人
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");
ContentResolver resolver = getContentResolver();
ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
ContentProviderOperation op1 = ContentProviderOperation.newInsert(uri)
.withValue("account_name", null)
.build();
operations.add(op1);
//依次是姓名,号码,邮编
ContentProviderOperation op2 = ContentProviderOperation.newInsert(dataUri)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "张三")
.build();
operations.add(op2);
ContentProviderOperation op3 = ContentProviderOperation.newInsert(dataUri)
.withValueBackReference(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "13800138000")
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
.build();
operations.add(op3);
ContentProviderOperation op4 = ContentProviderOperation.newInsert(dataUri)
.withValueBackReference(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Email.DATA, "10000@qq.com")
.withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK)
.build();
operations.add(op4);
//将上述内容添加到手机联系人中~
resolver.applyBatch("com.android.contacts", operations);
Toast.makeText(getApplicationContext(), "添加成功", Toast.LENGTH_SHORT).show();
删
public abstract int delete (Uri uri, String selection, String[] selectionArgs)
改和删就不详细介绍了,参数跟上面的是一样的
关于联系人的一些URI:
管理联系人的Uri:
ContactsContract.Contacts.CONTENT_URI
管理联系人的电话的Uri:
ContactsContract.CommonDataKinds.Phone.CONTENT_URI
管理联系人的Email的Uri:
ContactsContract.CommonDataKinds.Email.CONTENT_URI
(注:Contacts有两个表,分别是rawContact和Data,
rawContact记录了用户的id和name,
其中id栏名称为:ContactsContract.Contacts._ID, name名称栏为ContactContract.Contracts.DISPLAY_NAME,
电话信息表的外键id为ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
电话号码栏名称为:ContactsContract.CommonDataKinds.Phone.NUMBER.
data表中Email地址栏名称为:ContactsContract.CommonDataKinds.Email.DATA
其外键栏为:ContactsContract.CommonDataKinds.Email.CONTACT_ID)
关于多媒体的一些URI:
存储在sd卡上的音频文件:
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
存储在手机内部存储器上的音频文件:
SD卡上的图片文件内容:
MediaStore.Audio.Images.EXTERNAL_CONTENT_URI
手机内部存储器上的图片:
MediaStore.Audio.Images.INTERNAL_CONTENT_URI
SD卡上的视频:
MediaStore.Audio.Video.EXTERNAL_CONTENT_URI
手机内部存储器上的视频:
(注:图片的显示名栏:Media.DISPLAY_NAME,
图片的详细描述栏为:Media.DESCRIPTION
图片的保存位置:Media.DATA
短信URI:
Content://sms
发送箱中的短信URI:
Content://sms/outbox
收信箱中的短信URI:
Content://sms/sent
草稿中的短信URI:
Content://sms/draft
- 提供一些复杂的数据或者文件给其他的应用
- 允许用户从你的应用上拷贝一些复杂的数据到其他应用
- 你想要使用搜索框架提供自定义搜索建议
- '#' 匹配任意长度的任意字符串
- '*' 匹配任意长度的数值型字符串
public class DBHelper extends SQLiteOpenHelper {
private final String SQL="CREATE TABLE test(_id INTEGER PRIMARY KEY AUTOINCREMENT,name);";
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
public class CustomProvider extends ContentProvider {
private static UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
private DBHelper dbHelper;
static {
uriMatcher.addURI("com.example.sumup.provider.customprovider", "test", 1);
}
@Override
public boolean onCreate() {
dbHelper = new DBHelper(getContext(), "test.db", null, 1);
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
return null;
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
switch (uriMatcher.match(uri)) {
case 1:
SQLiteDatabase db = dbHelper.getReadableDatabase();
long rowId = db.insert("test", null, values);
if (rowId > 0) {
Uri nameUri = ContentUris.withAppendedId(uri, rowId);
getContext().getContentResolver().notifyChange(nameUri, null);
Toast.makeText(getContext(),"数据插入成功",Toast.LENGTH_SHORT).show();
return nameUri;
}
break;
}
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return 0;
}
}
contentResolver.registerContentObserver(uri,true,new CustomObserver(new Handler()));
public class CustomObserver extends ContentObserver{
public CustomObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
//在这里就可以做一些相关的操作
}
}
- Android开发总结笔记 四大组件之ContentPovider(上) 1-2-8
- Android开发总结笔记 四大组件之ContentPovider(下) 1-2-9
- Android开发总结笔记 四大组件之Activity(上) 1-2-1
- Android开发总结笔记 四大组件之Service(上) 1-2-4
- Android开发总结笔记 四大组件之Activity(中) 1-2-2
- Android开发总结笔记 四大组件之Activity(下) 1-2-3
- Android开发总结笔记 四大组件之Service(中) 1-2-5
- Android开发总结笔记 四大组件之Service(下) 1-2-6
- Android开发总结笔记 四大组件之BroadcastReceiver 1-2-7
- Android开发笔记之四大组件琐碎知识回顾总结
- Android开发四大组件之Service总结
- Android四大组件总结笔记
- Android开发之四大组件
- Android四大基本组件(3)之四大组件总结
- Android四大组件之 Activity(上)
- Android四大组件之BroadcastReceiver(上)
- Android四大组件之ContentProvider(上)
- Android四大组件之Activity<上>
- jQuery之防止冒泡事件
- jQuery学习笔记之四
- 大规模机器学习的相关资料集锦
- [perl]ftpsync
- 九度考研真题 浙大 2011-1浙大1001:A+B for Matrices
- Android开发总结笔记 四大组件之ContentPovider(上) 1-2-8
- 【JavaScript】兼容IE6的滚动监听
- 将图片以二进制数组存入数据库,从数据库中取出转为图片
- 喝咖啡的好处
- hihocoder 1121 : 二分图一•二分图判定
- 代码混淆详解
- 九度考研真题 浙大 2011-2浙大1002:Grading
- 单例模式
- public protected private继承访问权限—C++