第10章 Android Content Provider
- 格式:ppt
- 大小:195.00 KB
- 文档页数:46
安卓的四⼤组件Android四⼤基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver⼴播接收器。
⼀:了解四⼤基本组件Activity :应⽤程序中,⼀个Activity通常就是⼀个单独的屏幕,它上⾯可以显⽰⼀些控件也可以监听并处理⽤户的事件做出响应。
Activity之间通过Intent进⾏通信。
在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。
典型的动作类型有:M AIN(activity的门户)、VIEW、PICK、EDIT 等。
⽽动作对应的数据则以URI 的形式进⾏表⽰。
例如:要查看⼀个⼈的联系⽅式,你需要创建⼀个动作类型为VIEW 的intent,以及⼀个表⽰这个⼈的URI。
与之有关系的⼀个类叫IntentFilter。
相对于intent 是⼀个有效的做某事的请求,⼀个intentfilter 则⽤于描述⼀个activity(或者IntentReceiver)能够操作哪些intent。
⼀个activity 如果要显⽰⼀个⼈的联系⽅式时,需要声明⼀个IntentFilter,这个IntentFilter 要知道怎么去处理VIEW 动作和表⽰⼀个⼈的URI。
IntentFilter 需要在AndroidManifest.xml 中定义。
通过解析各种intent,从⼀个屏幕导航到另⼀个屏幕是很简单的。
当向前导航时,activity 将会调⽤startActivity(Intent myIntent)⽅法。
然后,系统会在所有安装的应⽤程序中定义的IntentFilter 中查找,找到最匹配myIntent 的Intent 对应的activity。
新的activity 接收到myIntent 的通知后,开始运⾏。
当startActivity ⽅法被调⽤将触发解析myIntent 的动作,这个机制提供了两个关键好处:A、Activities 能够重复利⽤从其它组件中以Intent 的形式产⽣的⼀个请求;B、Activities 可以在任何时候被⼀个具有相同IntentFilter 的新的Activity 取代。
androidmanifest的provider用法在Android开发中,<provider>元素用于在AndroidManifest.xml文件中声明一个Content Provider。
Content Provider是Android系统中共享数据的一种标准方式,它允许一个应用程序访问另一个应用程序中的数据,同时保持数据的封装性和安全性。
使用<provider>标签时,需要指定以下属性:1.authorities:这是一个字符串数组,定义了Content Provider的唯一标识。
这个标识通常以URI的形式表示,如"com.example.myapp.provider"。
:指定Content Provider的实现类的全限定名。
3.exported:布尔值,指示Content Provider是否可以被其他应用程序访问。
如果设置为true,则表示Content Provider可以被其他应用访问;如果为false,则只有同一个应用或具有相同用户ID的应用可以访问。
4.grantUriPermissions:布尔值,指示是否授予临时权限给调用者,以便它们可以对ContentProvider提供的数据执行读/写操作。
5.pathPattern 和pathPrefix:这些属性用于限制哪些路径可以通过Content Provider暴露出去。
6.readPermission 和writePermission:定义了访问Content Provider所需的权限。
7.meta-data:用于传递额外的信息给Content Provider。
例如,如果要在AndroidManifest.xml中声明一个FileProvider,可以按照以下步骤操作:1.在manifest中使用<provider>标签来指定FileProvider。
2.指定有效的文件路径,以便FileProvider可以为文件生成对应的Content URI。
可编辑修改精选全文完整版解忧书店 JieYouBookshop 第一章单元测试1【单选题】 (20分)Android是如何组织Activity的?A.以堆的形式组织ActivityB.以图的形式组织ActivityC.以栈的形式组织ActivityD.以树的形式组织Activity2【单选题】 (20分)下列不是手机操作系统的是A.Windows VistaB.Window MobileC.Apple IPhone IOSD.Android3【判断题】 (20分)Logcat中Error级别输出调试信息最多。
A.错B.对4【判断题】 (20分)Android Studio要和Android SDK配合才能进行程序开发。
A.对B.错5【判断题】 (20分)调试程序时只能真实手机上进行。
A.错B.对第二章单元测试1【单选题】 (20分)下列哪个选项不是启动Activity 的方法?A.goToActivityB.startActivityC.startActivityFromChildD.startActivityForResult2【单选题】 (20分)哪个不是 Activity 的生命周期方法?A.onCreateB.startActivityC.onResumeD.onStart3【判断题】 (20分)Activity的隐式用法可以调用Android的系统功能。
A.对B.错4【判断题】 (20分)Intent无法把数据返回启动它的上一级Intent.A.对B.错5【判断题】 (20分)调用Intent有两种方式:显式调用与隐式调用。
A.对B.错第三章单元测试1【单选题】 (20分)下列哪个可做EditText编辑框的提示信息?A.android:digitsB.android:inputTypeC.android:hintD.android:text2【判断题】 (20分)设置TextView字体属性的是android:typeface。
第1章Android 基础入门一、填空题1、Android 是Google 公司基于Linux 、操作系统2、Android 系统采用分层结构,应用程序层、应用程序框架层、核心类库、Linux 内核。
3、ADB 的常见指令中,用于开启ADB 服务的是adb start-server。
4、在Android 程序中,src 目录用于放置程序的java 代码文件5、Android 程序开发完成后,如果要发布到互联网上供别人使用,打包成.apk 文件二、判断题1、Android 实际上就是一个手机。
×2、WCDMA 是中国自己独自定制的3G 标准,中国移动使用的就是这种标准。
×3、android 第一个版本Android 1.1是2008年9月发布的。
√4、gen 目录是自动生成的,主要有一个R.java 文件,该文件可手动修改。
×5、AndroidManifest.xml 文件是整个程序的配置文件。
√三、选择题1、随着智能手机的发展,移动通信技术也在不断升级,目前应用最广泛的是(C )A 、1GB 、2GC 、3GD 、4G2、ADT Bundle中包含了三个重要组成部分,分别是(ABC )A 、EclipseB 、SDKC 、SDK Manager,exeD 、ADB3、应用程序层是一个核心应用程序的集合,主要包括(B )A 、活动管理器B 、短信程序C 、音频驱动D 、Dalivik 虚拟机4、ADB 的常见指令中“列出所有设备”的指令是(C )A 、adb uninstallB 、adb installC 、adb deviceD 、adb emulator -avd5、创建程序时,填写的Application Name表示(A )A 、应用名称B 、项目名称C 、项目的包名D 、类的名字四、简答题1、简要说明Android 体系结构中每个层的功能。
Android 体系结构总共包含四层,分别是:● 应用程序层:设备上安装的软件应用都属于这一层● 应用程序框架层:包含应用API● 核心类库:包含系统库和运行环境,系统库包含了底层C 代码;运行环境包含了Java的核心库和Dalvik 虚拟机● Linux 内核:提供Android 的底层驱动。
ContentProvider的工作原理什么是ContentProviderContentProvider是Android中的一个组件,用于实现数据共享和数据访问的机制。
它允许一个应用程序将其数据暴露给其他应用程序,从而实现不同应用之间的数据共享和交互。
ContentProvider可以提供对结构化数据的访问,例如数据库中的表格,也可以提供对非结构化数据的访问,例如文件系统中的文件。
ContentProvider的作用ContentProvider主要有以下几个作用:1.数据共享:ContentProvider可以将一个应用程序的数据暴露给其他应用程序,从而实现数据的共享和交互。
其他应用程序可以通过ContentProvider访问和操作这些数据,而无需了解数据的具体存储方式和实现细节。
2.数据访问:ContentProvider提供了一种标准的接口,其他应用程序可以通过这个接口来访问和操作数据。
这样可以实现数据的统一管理,避免了重复的数据访问和操作代码。
3.数据保护:ContentProvider可以对数据进行权限控制,只有具有相应权限的应用程序才能访问和操作数据。
这样可以保护数据的安全性和私密性。
ContentProvider的工作原理ContentProvider的工作原理可以分为以下几个步骤:1. 注册ContentProvider在AndroidManifest.xml文件中,需要为ContentProvider注册一个相应的标签。
这个标签中需要指定ContentProvider的类名、权限等信息。
<providerandroid:name=".MyContentProvider"android:authorities="com.example.myapp.provider"android:exported="true" />2. 实现ContentProvider创建一个类来实现ContentProvider,并重写相应的方法。
如何调用系统的Content Provider一、ContentProvider简介我们说Android应用程序的四个核心组件是:Activity、Service、BroadcastReceiver和ContentProvider。
在Android中,应用程序彼此之间相互独立的,它们都运行在自己独立的虚拟机中。
ContentProvider提供了程序之间共享数据的方法,一个程序可以使用ContentProvider定义一个URI,提供统一的操作接口,其他程序可以通过此URI访问指定的数据,进行数据的增、删、改、查。
ContentProvider应该是Android在系统启动时就创建了,否则就谈不上数据共享了。
这就要求在AndroidManifest.XML中使用<provider>元素明确定义。
2. 可能会有多个程序同时通过ContentResolver访问一个ContentProvider,会不会导致像数据库那样的“脏数据”?这个问题一方面需要数据库访问的同步,尤其是数据写入的同步,在AndroidManifest.XML中定义ContentProvider的时候,需要考虑是<provider>元素multiprocess属性的值;另外一方面Android在ContentResolver中提供了notifyChange()接口,在数据改变时会通知其他ContentObserver,这个地方应该使用了观察者模式,在ContentResolver中应该有一些类似register,unregister的接口。
三、使用现成的ContentProvider下面我们就来看看代码,我们是怎么利用到现成的ContentProvider。
packageeoe.android.Demo;importandroid.app.Activity;importandroid.content.ContentResolver;importandroid.content.ContentValues;importandroid.database.Cursor;.Uri;importandroid.os.Bundle;importandroid.provider.ContactsContract;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.Toast;publicclassMainContentProviderextendsActivity{/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.main);Buttonb1=(Button)findViewById(R.id.Button01);OnClickListenerocl=newOnClickListener(){@OverridepublicvoidonClick(Viewv){ContentResolvercontentResolver=getContentResolver();//获得所有的联系人Cursorcursor=contentResolver.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null);//循环遍历if(cursor.moveToFirst()){intidColumn=cursor.getColumnIndex(ContactsContract.Contacts._ID);intdisplayNameColumn=cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);do{//获得联系人的ID号StringcontactId=cursor.getString(idColumn);//获得联系人姓名StringdisPlayName=cursor.getString(displayNameColumn);Toast.makeText(MainContentProvider.this,"联系人姓名:"+disPlayName,Toast.LENGTH_LONG).show();//查看该联系人有多少个电话号码。
Android应用程序组件Content Provider的共享数据更新通知机制分析在Android系统中,应用程序组件Content Provider为不同的应用程序实现数据共享提供了基础设施,它主要通过Binder进程间通信机制和匿名共享内存机制来实现的。
关于数据共享的另一个话题便是数据更新通知机制了,即如果一个应用程序对共享数据做了修改,它应该如何通知其它正在使用这些共享数据的应用程序呢?本文将分析Content Provider的共享数据更新通知机制,为读者解答这个问题。
Android应用程序组件Content Provider中的数据更新通知机制和Android系统中的广播(Broadcast)通知机制的实现思路是相似的。
在Android的广播机制中,首先是接收者对自己感兴趣的广播进行注册,接着当发送者发出这些广播时,接收者就会得到通知了。
更多关于Android系统的广播机制的知识,可以参考前面这一系列文章。
然而,Content Provider中的数据监控机制与Android系统中的广播机制又有三个主要的区别,一是前者是通过URI来把通知的发送者和接收者关联在一起的,而后者是通过Intent来关联的,二是前者的通知注册中心是由ContentService服务来扮演的,而后者是由ActivityManagerService 服务来扮演的,三是前者负责接收数据更新通知的类必须要继承ContentObserver类,而后者要继承BroadcastReceiver类。
之所以会有这些区别,是由于Content Proivder组件的数据共享功能本身就是建立在URI的基础之上的,因此专门针对URI来设计另外一套通知机制会更实用和方便,而Android系统的广播机制是一种更加通用的事件通知机制,它的适用范围会更广泛一些。
与分析Android系统的广播机制类似,我们把Content Provider的数据更新机制划分为三个单元进行分析,第一个单元是ContentService的启动过程,第二个单元是监控数据变化的ContentObserver的注册过程,第二个单元是数据更新通知的发送过程。
Android五种数据存储⽅式android 五种数据存储:SharePreferences、SQLite、Contert Provider、File、⽹络存储Android系统提供了四种存储数据⽅式。
分别为:SharePreference、SQLite、Content Provider和File。
但由于Android系统中,数据基本是私有的,都是存放于”data/data”程序包名⽬录下,所以要实现数据共享,正确⽅式是使⽤Content ProviderSQLite:SQLite是⼀个轻量级的数据库,⽀持基本的SQL语法,是常被采⽤的⼀种数据存储⽅式。
Android为此数据库提供了⼀个名为SQLiteDatabase的类,封装了⼀些操作数据库的apiSharedPreference:除SQLite数据库外,另⼀种常⽤的数据存储⽅式,其本质就是⼀个xml⽂件,常⽤于存储较简单的参数设置。
File:即常说的⽂件(I/O)存储⽅法,常⽤语存储⼤数量的数据,但是缺点是更新数据将是⼀件困难的事情。
ContentProvider: Android系统中能实现所有应⽤程序共享的⼀种数据存储⽅式,由于数据通常在各应⽤间的是互相私密的,所以此存储⽅式较少使⽤,但是其⼜是必不可少的⼀种存储⽅式。
例如⾳频,视频,图⽚和通讯录,⼀般都可以采⽤此种⽅式进⾏存储。
每个Content Provider都会对外提供⼀个公共的URI(包装成Uri对象),如果应⽤程序有数据需要共享时,就需要使⽤Content Provider为这些数据定义⼀个URI,然后其他的应⽤程序就通过Content Provider传⼊这个URI来对数据进⾏操作。
URI由3个部分组成:"content://"、数据的路径、标识ID(可选)。
1)SQLite数据存储======================================================================SQLite是⼀种转为嵌⼊式设备设计的轻型数据库,其只有五种数据类型,分别为:NULL:空值INTEGER:整数REAL:浮点数TEXT:字符串BLOB:⼤数据在SQLite中,并没有专门设计BOOLEAN和DATE类型,因为BOOLEAN型可以⽤INTEGER的0和1代替true和false,⽽DATE类型则可以拥有特定格式的TEXT、REAL和INTEGER的值来代替显⽰,为了能⽅便的操作DATE类型,SQLite提供了⼀组函数,在Android系统中提供了anroid.database.sqlite包,⽤于进⾏SQLite数据库的增,删,改,查⼯作,其主要⽅法如下: beginTransaction(): 开始⼀个事务。