ContentProvider之系统提供者
来源:互联网 发布:朗读英语的软件 编辑:程序博客网 时间:2024/05/16 11:52
详解:
今天我们讲解的是ContentProvider关于系统的提供,如果你想了解自定义的提供者与访问者的话你可以百度一下,因为那个比较简单而且我们用到的几率是很小的,我们一般都会用系统提供的,像我们平时用的联系人,图库,音乐等,都是系统自己提供的,我们不需要去写只要调用它就可以了,话说ContentProvider是什么呢?它是我们的Android端四大组件之一,下面我们就来实践吧
实践:
我们就来实践获取联系人和获取短信吧
我们先用listview把数据排列出来,写个xml布局文件
<LinearLayout tools:context="com.example.g160828_android23_systemprovider.MainActivity" android:orientation="vertical" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android">
<Button android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="获取联系人"
android:onClick="getContacast"/>
<Button android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="获取信息"
android:onClick="getsms"/>
<ListView android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/lv_main_syspro">
</ListView>
</LinearLayout>
在ainActivity获取控件,并得到数据
public class MainActivity extends AppCompatActivity {
private ContentResolver contentResolver;
private List<String> list=new ArrayList();
private ListView lv_main_syspro;
private MyAdapter m;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取控件
lv_main_syspro = (ListView) findViewById(R.id.lv_main_syspro);
contentResolver = getContentResolver();
//设置设配器
m = new MyAdapter();
lv_main_syspro.setAdapter(m);
}
//得到联系人方法
blic void getContacast(View view) {
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); //<1>content://com.android.contacts/raw_contacts(获得联系人的id,姓名)这是系统里面的地址
Cursor cursor = contentResolver.query(uri, null, null, null, null);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("display_name"));
Log.i("test", id + " " + name); //得到联系人id和姓名
Uri uri1=Uri.parse("content://com.android.contacts/raw_contacts/"+id+"/data");
<2>content://com.android.contacts/raw_contacts/"+id+"/data(根据联系人的id获得联系人的信息)
Cursor cursor1=contentResolver.query(uri1,null,null,null,null);
while (cursor1.moveToNext()){
String phone=cursor1.getString(cursor1.getColumnIndex("mimetype"));
if ("vnd.android.cursor.item/phone_v2".equals(phone)){
String data=cursor1.getString(cursor1.getColumnIndex("data1")); //得到联系人电话,因为系统表的结构是这样的所以我们需要先判断一个表里面的字段是否与电话地址一样
Log.i("test"," "+data);
list.add(name);
list.add(data);
}
}
}
m.notifyDataSetChanged();
}
//得到短信方法
public void getsms(View view){
Uri urisms = Uri.parse("content://sms/"); //短信协议地址
Cursor cursor = contentResolver.query(urisms, null, null, null, null);
while(cursor.moveToNext()){
int id=cursor.getInt(cursor.getColumnIndex("_id"));
String address=cursor.getString(cursor.getColumnIndex("address"));
String body=cursor.getString(cursor.getColumnIndex("body"));
Log.i("test",id+" "+address +body);
list.add(address);
list.add(body);
}
m.notifyDataSetChanged();
}
class MyAdapter extends BaseAdapter{
private TextView tv_main_mylist;
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if (view==null){
view=getLayoutInflater().inflate(R.layout.activity_mylist,null); //把布局文件转换为view
//我们需要重写一个布局文件,里面放一个文本框就可以了,用来输出数据,如果你不想自己写的话就可以引用系统的布局,但是别把id获取错误了
tv_main_mylist = (TextView) view.findViewById(R.id.tv_main_mylist);
}
tv_main_mylist.setText(""+list.get(i));
return view;
}
}
}
别忘记配置权限哦
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS"></uses-permission>
- ContentProvider之系统提供者
- 63.内容提供者ContentProvider--系统内容提供者(获取短信)
- Android 开发之 ContentProvider 内容提供者
- Android开发之内容提供者ContentProvider
- Android四大组件之内容提供者--ContentProvider
- Android学习之内容提供者ContentProvider
- 四大天王之内容提供者ContentProvider
- Android组件之ContentProvider(内容提供者)
- Android自助餐之内容提供者ContentProvider使用
- Android四大组件之内容提供者ContentProvider
- android之ContentProvider(内容提供者)
- 四大组件之内容提供者ContentProvider
- Android四大组件之内容提供者--ContentProvider
- 安卓之ContentProvider内容提供者
- 64.内容提供者ContentProvider--获取系统的联系人,插入联系人
- android 复习之路之ContentProvider 内容提供者
- Android 之使用ContentProvider(内容提供者)共享数据
- android四大组件之内容提供者(ContentProvider)
- APNG在QT中的使用(一)
- Maven学习笔记——新建maven web项目缺失文件夹的问题解决
- TabLayout && ViewPager _布局文件
- 嵌入式开发学习课程
- Android 手写数据库框架
- ContentProvider之系统提供者
- Android NDK 工具链的使用方法(Standalone Toolchain)
- 小黄人的制作
- 654. Maximum Binary Tree
- GitHub使用1
- Worried School HDU-6008 模拟
- 旧文章都删除掉,重新写
- 剑指Offer--4.重建二叉树
- 第一次写博客,还不知道写什么,请大家多多关照