package comw.example.user.android2lesson_06_systemcontentprovider; import android.content.ContentResolver; import android.database.Cursor; importandroid.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { /** * 调用系统提供的ContentProvider * 今天以获取联系人为例 * 系统在写联系人这个app的时候,就已经提供好了联系人的ContentProvider * 看一下系统提供的联系人数据库 * * 源码里面都有 * raw_contacts表 * contact_id存放联系人的id. * * data表 * 这个表是用来存储所有的联系人的详细信息的 * 一个联系人的信息可能分为多条数据 * 其中比较重要的字段是数据类型,联系人id,还有数据内容 * 其中有一个字段mime_type是数据的类型(邮箱,名字,电话...) * * mimetype表 * 就是联系人所有的数据类型选项 * * 看源码可以看出contentProvider有两个Uri,两个都是可以用的,在4.0之后只能使用分号后面的Uri,该路径是向低版本兼容的 * * 如果要获取联系人的数据,该怎么做? * 1.获取所有联系人的id * 2.根据id查询到这个联系人的所有数据信息 * * * * * @param savedInstanceState */ private Button getContacts; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getContacts= (Button) findViewById(
R.id.getContacts); getContacts.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //在这里进行联系人的获取 ContentResolver contentResolver=getContentResolver(); //1.1获取所有的联系人id Cursor cursorID=contentResolver.query(Uri.parse("content://com.android.contacts/raw_contacts"),new String[]{"contact_id"},null,null,null); if (cursorID.getCount()==0){ Toast.makeText(MainActivity.this,"没有联系人",Toast.LENGTH_SHORT).show(); return; } //2.根据id获取到每一个联系人的所有信息 while (cursorID.moveToNext()){ //拿到id的字符串 String contactid=cursorID.getString(cursorID.getColumnIndex("contact_id")); //根据id去data数据库中查询联系人的所有信息 Cursor contactData= contentResolver.query(Uri.parse("content://com.android.contacts/data"),new String[]{"data1","mimetype"},"raw_contact_id=?",new String[]{contactid},null); //遍历获取联系人的信息 while (contactData.moveToNext()) { //拿到数据的内容 String data1 = contactData.getString(contactData.getColumnIndex("data1")); //拿到数据的类型 String mimetype = contactData.getString(contactData.getColumnIndex("mimetype")); if ("vnd.android.cursor.item/email_v2".equals(mimetype)) { Log.i("邮箱", data1); } else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) { Log.i("手机", data1); } else if ("vnd.android.cursor.item/name".equals(mimetype)) { Log.i("名字", data1); } } //关闭游标对象释放内存 contactData.close(); } //关闭游标对象释放内存 cursorID.close(); //3.添加权限允许读取ContentProvider // <uses-permission android:name="android.permission.READ_CONTACTS"/> } }); } }
ContentProvider如何获取联系人
最新推荐文章于 2022-08-19 21:15:00 发布