您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
35_操作系统contentprovider的联系人
发布时间:2021-02-21 21:44:57编辑:雪饮阅读()
TortoiseGit
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyApplication">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
部署运行后就可以看到日志猫中获取到了联系人的数据 最后部署到设备运行后回到联系人app中就可以看到wangwu这条联系人数据就被成功写入了
import androidx.appcompat.app.AppCompatActivity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
getAllContactInfo();
} catch (Exception e) {
e.printStackTrace();
}
}
public void getAllContactInfo() throws Exception{
//第一个表是联系人主表,第二个表是联系人主表关联的数据字段表
String rawbase = "content://com.android.contacts/raw_contacts";
String database = "content://com.android.contacts/data";
Cursor cursor = getContentResolver().query(Uri.parse(rawbase), null, null, null, null);
while (cursor.moveToNext()) {
String id = cursor.getString( cursor.getColumnIndex("_id"));
System.out.println("id ="+ id);
Cursor datacursor = getContentResolver().query(Uri.parse(database), null, "raw_contact_id=?", new String[]{id}, null);
while (datacursor.moveToNext()) {
String[] names = datacursor.getColumnNames();
String namesToStr="";
for(int i =0;i<names.length;i++){
namesToStr+=names[i]+" ";
}
System.out.println("当前content://com.android.contacts/data返回的字段列表:"+namesToStr);
String type = datacursor.getString(datacursor.getColumnIndex("mimetype"));
System.out.println(type);
//根据mimetype类型值来区分当前数据是邮箱、姓名或者电话号码,具体参考联系人数据库中的存储mimetype记录所在表
if("vnd.android.cursor.item/email_v2".equals(type)){
String data1 = datacursor.getString( datacursor.getColumnIndex("data1"));
System.out.println("邮箱 "+ data1);
}else if("vnd.android.cursor.item/name".equals(type)){
String data1 = datacursor.getString( datacursor.getColumnIndex("data1"));
System.out.println("姓名 "+ data1);
}else if("vnd.android.cursor.item/phone_v2".equals(type)){
String data1 = datacursor.getString( datacursor.getColumnIndex("data1"));
System.out.println("电话号码 "+ data1);
}
}
datacursor.close();
}
cursor.close();
}
}
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
writeContact();
} catch (Exception e) {
e.printStackTrace();
}
}
public void getAllContactInfo() throws Exception{
//第一个表是联系人主表,第二个表是联系人主表关联的数据字段表
String rawbase = "content://com.android.contacts/raw_contacts";
String database = "content://com.android.contacts/data";
Cursor cursor = getContentResolver().query(Uri.parse(rawbase), null, null, null, null);
while (cursor.moveToNext()) {
String id = cursor.getString( cursor.getColumnIndex("_id"));
System.out.println("id ="+ id);
Cursor datacursor = getContentResolver().query(Uri.parse(database), null, "raw_contact_id=?", new String[]{id}, null);
while (datacursor.moveToNext()) {
String[] names = datacursor.getColumnNames();
String namesToStr="";
for(int i =0;i<names.length;i++){
namesToStr+=names[i]+" ";
}
System.out.println("当前content://com.android.contacts/data返回的字段列表:"+namesToStr);
String type = datacursor.getString(datacursor.getColumnIndex("mimetype"));
System.out.println(type);
//根据mimetype类型值来区分当前数据是邮箱、姓名或者电话号码,具体参考联系人数据库中的存储mimetype记录所在表
if("vnd.android.cursor.item/email_v2".equals(type)){
String data1 = datacursor.getString( datacursor.getColumnIndex("data1"));
System.out.println("邮箱 "+ data1);
}else if("vnd.android.cursor.item/name".equals(type)){
String data1 = datacursor.getString( datacursor.getColumnIndex("data1"));
System.out.println("姓名 "+ data1);
}else if("vnd.android.cursor.item/phone_v2".equals(type)){
String data1 = datacursor.getString( datacursor.getColumnIndex("data1"));
System.out.println("电话号码 "+ data1);
}
}
datacursor.close();
}
cursor.close();
}
public void writeContact() throws Exception{
//写入联系人的内容提供者接口地址,像是这个接口地址以及上面获取联系人的接口,这些都可以参考联系人源码中的内容提供者
//其实无论获取或者写入,都可以参考联系人源码以及联系人项目的数据库中的各个表关系、表字段等的理解,也就自然得心应手了。
String rawbase = "content://com.android.contacts/raw_contacts";
ContentValues values = new ContentValues();
Uri uri = getContentResolver().insert(Uri.parse(rawbase), values);
//返回的raw_contact 表中的_id
long id = ContentUris.parseId(uri);
String database = "content://com.android.contacts/data";
ContentValues nameValues = new ContentValues();
nameValues.put("mimetype", "vnd.android.cursor.item/name");
nameValues.put("data1", "wangwu");
nameValues.put("raw_contact_id", id);
getContentResolver().insert(Uri.parse(database), nameValues);
ContentValues phoneValues = new ContentValues();
phoneValues.put("mimetype", "vnd.android.cursor.item/phone_v2");
phoneValues.put("data1", "999999");
phoneValues.put("raw_contact_id", id);
getContentResolver().insert(Uri.parse(database), phoneValues);
ContentValues emailValues = new ContentValues();
emailValues.put("mimetype", "vnd.android.cursor.item/email_v2");
emailValues.put("data1", "wangwu@sina.cn");
emailValues.put("raw_contact_id", id);
getContentResolver().insert(Uri.parse(database), emailValues);
}
}
关键字词:contentprovider,联系人,android