您的位置:首页 > 移动开发 > Android开发

android组件之ContentProvider(三)——获取联系人&&其他

2017-02-06 16:21 471 查看
查询:

search.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
// 定义两个List来封装系统的联系人信息、指定联系人的电话号码、Email等详情
final ArrayList<String> names = new ArrayList<>();
final ArrayList<ArrayList<String>> details = new ArrayList<>();
// 使用ContentResolver查找联系人数据
Cursor cursor = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, null, null,
null, null);
// 遍历查询结果,获取系统中所有联系人
while (cursor.moveToNext())
{
// 获取联系人ID
String contactId = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID));
// 获取联系人的名字
String name = cursor.getString(cursor.getColumnIndex(
ContactsContract.Contacts.DISPLAY_NAME));
names.add(name);
// 使用ContentResolver查找联系人的电话号码
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + contactId, null, null);
Log.e("mrpeng", "selection: "+ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + contactId );
ArrayList<String> detail = new ArrayList<>();
// 遍历查询结果,获取该联系人的多个电话号码
while (phones.moveToNext())
{
// 获取查询结果中电话号码列中数据
String phoneNumber = phones.getString(phones
.getColumnIndex(ContactsContract
.CommonDataKinds.Phone.NUMBER));
detail.add("电话号码:" + phoneNumber);
}
phones.close();
// 使用ContentResolver查找联系人的E-mail地址
Cursor emails = getContentResolver().query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null, ContactsContract.CommonDataKinds.Email
.CONTACT_ID + " = " + contactId, null, null);
// 遍历查询结果,获取该联系人的多个E-mail地址
while (emails.moveToNext())
{
// 获取查询结果中E-mail地址列中数据
String emailAddress = emails.getString(emails
.getColumnIndex(ContactsContract
.CommonDataKinds.Email.DATA));
detail.add("邮件地址:" + emailAddress);
}
emails.close();
details.add(detail);
}
cursor.close();


添加

add.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// 获取程序界面中的三个文本框的内容
String name = ((EditText) findViewById(R.id.name))
.getText().toString();
String phone = ((EditText) findViewById(R.id.phone))
.getText().toString();
String email = ((EditText) findViewById(R.id.email))
.getText().toString();
// 创建一个空的ContentValues
ContentValues values = new ContentValues();
// 向RawContacts.CONTENT_URI执行一个空值插入
// 目的是获取系统返回的rawContactId
Uri rawContactUri = getContentResolver().insert(
ContactsContract.RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
// 设置内容类型
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
// 设置联系人名字
values.put(StructuredName.GIVEN_NAME, name);
// 向联系人URI添加联系人名字
getContentResolver().insert(android.provider.ContactsContract
.Data.CONTENT_URI, values);
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
// 设置联系人的电话号码
values.put(Phone.NUMBER, phone);
// 设置电话类型
values.put(Phone.TYPE, Phone.TYPE_MOBILE);
// 向联系人电话号码URI添加电话号码
getContentResolver().insert(android.provider.ContactsContract
.Data.CONTENT_URI, values);
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
// 设置联系人的E-mail地址
values.put(Email.DATA, email);
// 设置该电子邮件的类型
values.put(Email.TYPE, Email.TYPE_WORK);
// 向联系人E-mail URI添加E-mail数据
getContentResolver().insert(android.provider.ContactsContract
.Data.CONTENT_URI, values);
Toast.makeText(MainActivity.this, "联系人数据添加成功",
Toast.LENGTH_SHORT).show();
}
});


ContentProvider也可获取多媒体内容

add.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// 创建ContentValues对象,准备插入数据
ContentValues values = new ContentValues();
values.put(Media.DISPLAY_NAME, "jinta");
values.put(Media.DESCRIPTION, "金塔");
values.put(Media.MIME_TYPE, "image/jpeg");
// 插入数据,返回所插入数据对应的Uri
Uri uri = getContentResolver().insert(
Media.EXTERNAL_CONTENT_URI, values);
// 加载应用程序下的jinta图片
Bitmap bitmap = BitmapFactory.decodeResource(
MainActivity.this.getResources(),
R.drawable.jinta);
System.out.println("======");
OutputStream os = null;
try
{
// 获取刚插入的数据的Uri对应的输出流
os = getContentResolver().openOutputStream(uri); // ①
// 将bitmap图片保存到Uri对应的数据节点中
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
});


view.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// 清空names、descs、fileNames集合里原有的数据
names.clear();
descs.clear();
fileNames.clear();
// 通过ContentResolver查询所有图片信息
Cursor cursor = getContentResolver().query(
Media.EXTERNAL_CONTENT_URI, null, null, null, null);
while (cursor.moveToNext())
{
// 获取图片的显示名
String name = cursor.getString(cursor
.getColumnIndex(Media.DISPLAY_NAME));
// 获取图片的详细描述
String desc = cursor.getString(cursor
.getColumnIndex(Media.DESCRIPTION));
// 获取图片的保存位置的数据
byte[] data = cursor.getBlob(cursor
.getColumnIndex(Media.DATA));
// 将图片名添加到names集合中
names.add(name);
// 将图片描述添加到descs集合中
descs.add(desc);
// 将图片保存路径添加到fileNames集合中
fileNames.add(new String(data, 0, data.length - 1));
}


监听ContentProvider数据变化

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 为content://sms的数据改变注册监听器
getContentResolver().registerContentObserver(
Uri.parse("content://sms"), true,
new SmsObserver(new Handler()));
}
// 提供自定义的ContentObserver监听器类
private final class SmsObserver extends ContentObserver
{
public SmsObserver(Handler handler)
{
super(handler);
}
public void onChange(boolean selfChange)
{
// 查询发送箱中的短信(处于正在发送状态的短信放在发送箱)
Cursor cursor = getContentResolver().query(
Uri.parse("content://sms/outbox")
, null, null, null, null);
// 遍历查询得到的结果集,即可获取用户正在发送的短信
while (cursor.moveToNext())
{
StringBuilder sb = new StringBuilder();
// 获取短信的发送地址
sb.append("address=").append(cursor
.getString(cursor.getColumnIndex("address")));
// 获取短信的标题
sb.append(";subject=").append(cursor
.getString(cursor.getColumnIndex("subject")));
// 获取短信的内容
sb.append(";body=").append(cursor
.getString(cursor.getColumnIndex("body")));
// 获取短信的发送时间
sb.append(";time=").append(cursor
.getLong(cursor.getColumnIndex("date")));
System.out.println("发送短信:" + sb.toString());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: