其他分享
首页 > 其他分享> > Android 内容提供者、内容观察者(第二十一 二十二节课)

Android 内容提供者、内容观察者(第二十一 二十二节课)

作者:互联网

第二十一节课

·内容提供者简介
·内容提供者(ContentProvider)是Android系统四大组件之一,用于保存和检索数据,是Android系统中不同应用程序之间共享数据的接口。.ContentProvider是不同应用程序之间进行数据交换的标准API,以Uri形式对外提供数据,允许其他应用操作本应用数据。其他应用则使用ContentResolver,并根据ContentProvider提供的Uri操作指定数据。

在这里插入图片描述
创建一个内容提供者

一定义一个类继承android.content包下的ContentProvider类(抽象类)。子
类需要重写它的onCreate()、delete()、getType()、insert()、query()、update()这几个抽象方法。

在这里插入图片描述
ContentResolver的基本用法
·在Android系统中,ContentResolver充当着桥梁的角色。应用程序通过ContentProvider暴露自己的数据,通过ContentResolver对应用程序暴露的数据进行操作。
·通过ContentResovler对象实现数据的操作代码如下:
Uri uri= Uri.parse(“contentlicn.itcast.db.personprovider/person”);ContentResolver resolver = context.getContentResolver0;
Cursor cursor = resolver.query(uri, new Stringl] f “address”, “date” “tyvpe” “body” };, null, null, null ;while (cursor.moveToNext(y){
String address = cursor.getString(O);
……
)
cursor.close():

.使用步骤创建内容提供者:
内容提俱者:
1.创建自定义类继承父类ContentProvider
2.重写抽象父类的方法
3.构建Uri解析器
4.添加构建访问uri。数据增刮改者:api
5.注册内容提供者

cprovider
android:authorities=""com.provider"
android:name=""com.imau.provider.MyProvider"android:exported="true"
</provider>

2。内容访问者:
*1.获取提供者:getcontentReso1verO; contentReso1ver对象2.访向内容提供者:增剧改查

contentResolver resolver= getcontentResolvero;
uri uri=uri.parse("content://com.provider111/query"");
cursor cursor= resolver.query(uri,nu11,nu11 ,nu11,nu11);
if(cursor!=nu118ecursor.getcount(>0){
while (cursor.moveToNextOi
1ong _id=cursor.getInt(O);
string sname=cursor.getstring(1);string sno=cursor.getstring(2);string sex=cursor.getstring(3);int img=cursor.getInt(4);
Student student=new student(_id,sname ,sno ,sex ,img);System.out.println(student);
)

3.内容观察者使用

1.注册内容观察者
uri uri2=uri.parse(""content://com.provider/delete"");
//注册层内容观察者
reso1ver.registercontentobserver(uri2,true,new contentobserver(new Hand7er()){
//监听内容提供者数据发生改变
public void onchange (boolean selfchange){
super.onchange(se1fchange);
system.out.println(C”"致据发生改变........"";
}
};

2.在内容提供者添加通知内容观察者代码insert. update . delete方法中;

uri uri2=Uri.parse(""content: / /com.provider/insert");
getcontext.getcontentResolver ().notifychange(uri2 ,nu11);

内容观察者
·内容观察者(ContentObserver)是用来观察指定uri所代表的数据。当ContentObserver观察到指定Uri代表的数据发生变化时,就会触发ContentObserver的onChange()方法。此时在onChange()方法里使用ContentResovler可以查询到变化的数据。
从图可以看出,使用ContentObserver观察A应用的数据时,首先要在A应用的ContentProvider中调用ContentResolver的notifyChange()方法。调用了这个方法之后当数据发生变化时,它就会向“消息中心”发送数据变化的消息。然后C应用观察到“消息中心”有数据变化时,就会触发
ContentObserver的onChange()方法。

在这里插入图片描述
理解广播与广播接收器
1.广播事件处理属于系统级的事件处理(一般事件处理是属于View级的事件
处理)
2.一个应用可以在发生特定事件时发送Broadcas),系统中任何应用只要注册,了对应的Receiver就会接收到此Broadcast
3.一个应用如果对某个广播感兴趣,就可以注册对应KReceiver来接收广播
4.广播事件机制是应用程序(进程间)之间通信的一种手段
5.广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心
接收方是如何处理数据的,通过这种形式来达到接、收双方的完全解耦
6.广播事件处理过程即针对某一广播做出响应的过程
5.广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心
接收方是如何处理数据的,通过这种形式来达到接、收双方的完全解耦
6.广播事件处理过程即针对某一广播做出响应的过程
在这里插入图片描述
.Android系统中,内置了很多系统级别的广播,例如手机开机完成后会发送一条广播,电池电量不足时会发送一条广播等。
Android系统中提供了广播接收者BroadcastReceiver,广播接收者的作用就是接收来自系统或其他应用程序的广播,并作出回应。
广播(Broadcast)是一种运用在应用程序之间传递消息的执制。
广播接收者(BroadcastReceiver)是用来过滤、接收并响应广播的一类组件。
广播接收者可以监听系统中的广播消息,在不同组件之间进行通信。
广播接收者创建与注册
·要使用广播接收者接收其他应用程序发出的广播,先要在本应用中创建广播接收者并进行注册。
1、创建广播接收者
public class MyBroadcastReceiver extends BroadcastReceiver {
@override
public void onReceive(Context context, Intent intent) {
.……a.aaa"
}
}

·注册广播有两种方式,常驻型广播与非常驻型广播。
2、注册非常驻型广播
非常驻型广播依赖于注册广播的组件的生命周期.例如,在Activity中注册广播接收者,当Activity销毁后广播也随之被移除。这种广播事件在代码中注册。
MyBroadcastReceiver receiver = new MyBroadCastReceiver();
String action = “android.provider.Telephony.SMs_RECEIVED”";
lntentFilter intentFilter = new lIntentFilter(action);
registerReceiver(receiver, intentFilter);
非常驻型广播可以在onDestory()方法中解除广播,具体代码如下:unregisterReceiver(receiver);

标签:提供者,uri,第二十一,cursor,广播,Uri,Android,ContentProvider,节课
来源: https://blog.csdn.net/weixin_45809860/article/details/113412507