android学习笔记五。2、其他组件

一、ContentProvider内容提供者.是是android中一个应用向第三方共享数据的方式,android中的联系人,sms(短信记录)等都是通过这一方式来向外提供的

  1、使用:

    在应用中使用ContentProvider提供的数据并不是直接使用的,而是需要通过ContentResolver来实现的,ContentResolver中包含query/insert/delete/update等方法用于操作数据,但其内部就是调用ContentProvider的实现类来真正操作的。

使用ContentProvider获取sms数据的例子

  上面的使用过程分三步:

  ①指定访问URI,

  ②通过getContentResolver()获取ContentResolver对象,然后进行增删改查操作

  ③对获取数据/结果进行处理。

  上面是简述,下面对其中使用的内容进行详细说明:

    ①、URI:最早使用到的地方就是在Intent进行匹配的时候,其实这时的URI是和data向匹配的:

content://  com.example.project   :200      /folder/subfolder/etc
\---------/  \---------------------------/ \---/ \--------------------------/
scheme                 host                   port        path
                \--------------------------------/
                          authority   

  现在大家应该知道data flag中那些属性的含义了吧,看下data flag
  <data android:host="string"
        android:mimeType="string"
        android:path="string"
        android:pathPattern="string"
        android:pathPrefix="string"
        android:port="string"
        android:scheme="string" />

  在使用ContentProvider时对URI有一个要求:就是其scheme必须是content,原因见2.

  注意:关于匹配ContentProvider的URI规则见自定义ContentProvider部分。

  ②、以query()为例,ContentResolver对象最终会调用的方法的源码见下

ContentResolver源码

  其中可以看到第一步是检测传入的uri是否为空,第二部就是对传入uri的scheme进行检测,判断其是否为content

cquireUnstableProvider源码(检测uri的scheme)

  同时可以看到是调用了ContentProvider对象进行真正的查询操作。这样做是为了简化对ContentProvider的操作,和进行安全检测等。

  ③、增删查改中最重要的就是查询的结果即Cursor的处理。Cursor就是一个数据的集合,可以获取某一行然后读取其中的数据。该类是一个接口类。

  2、自定义ContentProvider:这是自己项目对外提供数据的一种方式,最好的方式就是以android提供的范本进行创建,这里参考的是android的sample:notepad。这个项目中有3个文件比较重要,详细说明:

  1、NodePad.java:这个类中定义了一些与访问有关的属性,例如URI,列的名字等。这个类要和ContentProvider配合使用。

NotePad.java

  2、NotePadProvider.java:这个类就是自定义的ContentProvider,需要继承ContentProvider类并至少实现增删改查方法还有构造方法。在这个例子中,可以看到使用了以下几个类:

  ①DatabaseHelper:一个数据库帮助类,继承自SQLiteOpenHelper。

DatabaseHelper源码

  ②UriMatcher:这个对象的作用是用来指定匹配该ContentProvider的URI的匹配规则。

UriMatcher部分源码

  ③SQLiteQueryBuilder:该类是用来构建查询语句的。

 

  3、AndroidManifest.xml:这里需要注意的是清单文件中provider声明的部分

清单文件

  其中比较重要的是android:authorities和权限的声明,其实ContentProvider有非常复杂的权限管理,详见:http://iwillbemyself.blog.163.com/blog/static/1702232282012115104056917/,

  对于自定义ContentProvider还有一点比较重要的就是当操作的数据库有所改变时,应该通知相应的ContentObserver(内容观察者)进行处理。

二、BroadcastReceiver广播接收者,广播是Android中传递事件的方式,有两个方面:广播发送者和广播接收者。

1、广播发送者可以发送两种广播:同步广播有序广播,两者的区别是

  ①接收顺序的区别:同步广播同步接收,有序广播可以通过指定优先级来设置接收顺序

  ②是否可以中断的区别:由于有序广播有顺序,才有可能将广播进行中断,不让后来者进行接收;而同步广播则不能中断。

2、广播接收者:广播发送的具体内容就是一个隐式意图对象(因为通常是给另外的应用使用的),接收者通过两步来实现

  ①在清单文件中进行配置,

  ②继承BroadcastReceiver对象,并重写onReceive方法,在其中实现功能即可。

有序广播通过指定优先级来确定接收顺序,优先级从-1000~1000,

  ①如果同一个应用中的优先级相同,则在清单文件中前面的先接收

  ②如果不同应用中的优先级相同,则先安装的应用先接收

参考:http://blog.csdn.net/xiazdong/article/details/7768807,

http://www.runoob.com/w3cnote/android-tutorial-broadcastreceiver.html

转载于:https://www.cnblogs.com/songfeilong2325/p/5446546.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一维条形码识别c语言_条形码的优点

条形码是迄今为止最经济、实用的一种自动识别技术。条形码技术具有以下几个方面的优点A&#xff0e;输入速度快&#xff1a;与键盘输入相比&#xff0c;条形码输入的速度是键盘输入的5倍&#xff0c;并且能实现“即时数据输入”。B&#xff0e;可靠性高&#xff1a;键盘 输入数…

气象数据领航无人飞行器线路优化大赛解决方案(3rd place)

1 队伍介绍 队伍名称&#xff1a;酒后写诗 队伍成员&#xff1a;陈权、林望黎、黄章炜 队伍名次&#xff1a;3 / 1646 2 问题简介 这个问题说起来其实挺简单&#xff08;但实现起来困难重重&#xff09;&#xff0c;就是提供了气象局得到的10个模型的预测数据&#xff08;…

mac最好用的markdown_「建议收藏」PCMaclinux,最好用Markdown编辑器清单

文章很长&#xff0c;不想看&#xff0c;请直接拉到底看简略版清单&#xff01;&#xff01;如果您曾经用Word写过文章&#xff0c;并尝试将文本移动到CMS中(头条、百家号等)&#xff0c;那么您可能已经花费了大量时间&#xff0c;来调整这种跨平台转换导致的格式杂乱。因此&am…

Nodejs 操作 MongoDb 数据库

一、在 Nodejs 中使用 Mongodb 在前面的博文我们给大家讲了如何使用命令操作 Mongodb&#xff0c;这篇博文开始我们给大家讲解一 下如何使用 Nodejs 来操作 Mongodb 数据库 Nodejs 操作 mongodb 数据库官方文档&#xff1a;https://www.mongodb.org.cn/drivers/5.html npm i…

机智的ensemble

1 引言 本文主要结合了李宏毅的机器学习课程之Ensemble和周志华的《机器学习》西瓜书两者的说法&#xff0c;对ensemble这一竞赛利器做了总结。 Ensemble主要可以分为bagging和boosting两种方法。其中&#xff0c;bagging适用于基模型复杂度比较高的情况&#xff08;如树模型…

Linux的sort命令

Linux的sort命令 Linux的sort命令就是一种对文件排序的工具&#xff0c;sort命令的功能十分强大&#xff0c;是Shell脚本编程时常使用的文件排序工具。 sort命令将输入文件看做由多条记录组成的数据流&#xff0c;而记录由可变宽度的字符串组成&#xff0c;以换行符作为定界符。…

delphi 调用php接口_爱站权重查询 API 接口请求调用

爱站权重查询 API 接口在网上已经很多且大都封装成了 API 供别人调用。支持前台跨域请求&#xff0c;以GET/POST方式提交即可。爱站权重查询 API 接口可以查询百度权重、搜狗等级、360权重、神马权重、谷歌等级等&#xff0c;你可以选择调用本站的接口&#xff0c;也可以利用本…

Express 路由、Ejs 、静态文件托管、中间件

一、 Express 简单介绍 Express 是一个基于 Node.js 平台&#xff0c;快速、开放、极简的 web 开发框架&#xff0c;它提供一系 列强大的特性&#xff0c;帮助你创建各种 Web 和移动设备应用。 Express 官网&#xff1a; 英语官网&#xff1a;http://expressjs.com/中文官网…

相邻位数字差值的绝对值不能超过_热点争议中技术问题,伺服控制有几个零点?对应真绝对值多圈编码器意义...

回归技术&#xff0c;把技术问题单独挑出来讲透&#xff0c;争要争个明白&#xff0c;看要看得明白。技术就能越辩越明。如果有“真”与“假”之争&#xff0c;沉默不去争&#xff0c;就是让“真的”受伤&#xff0c;让真心实干的人受伤。伺服控制有三个零点&#xff0c;对应三…

Chapter1-1_Speech_Recognition(Overview)

文章目录1 古人看语音辨识2 什么是语音辨识2.1 输出部分 - Token2.2 输入部分 - 声音信号特征3 数据集4 模型本文为李弘毅老师【Speech Recognition - Overview】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自…

[Swift]loadNibNamed方法

我们自定义UITableViewCell的时候&#xff0c;经常会创建一个xib文件。 &#xff08;注意&#xff1a;选择创建文件要继承于cocoa touch class&#xff0c;而不是cocoa class&#xff0c;否则你是选不了创建xib的&#xff01;&#xff01;&#xff01;&#xff09; 然后我们可以…

Express Cookie 的基本使用

一、Cookie 简介 ● cookie 是存储于访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域 名的时候共享数据。 ● HTTP 是无状态协议。简单地说&#xff0c;当你浏览了一个页面&#xff0c;然后转到同一个网站的另一个页 面&#xff0c;服务器无法认识到这是同一个…

Chapter1-2_Speech_Recognition(LAS)

文章目录1 内容简述2 模型详述2.1 ListenRNN Encoder1D-CNN EncoderSelf-attentinon EncoderDown Sampling2.2 Attend2.3 Spell2.4 Beam Search2.5 Training2.6 Back to Attention本文为李弘毅老师【Speech Recognition - Listen, Attend, Spell】的课程笔记&#xff0c;课程视…

智能车的转弯部分_江西智能搬运平板车铁路轨道运输车-厂家直销

本公司致力发展搬运设备&#xff0c;从公司成立至今一直在做电动平车的研发&#xff0c;从几十千克自动化物流车到成百上千吨都能自行研发制造&#xff0c;取得了优异的业内好评和广大消费者的肯定&#xff01; BWP型无轨平板车是一种使用特殊的行走机构&#xff0c;能够在较小…

Express Session 的基本使用

一、 Session 简单介绍 session 是另一种记录客户状态的机制&#xff0c;不同的是 Cookie 保存在客户端浏览器中&#xff0c;而 session 保存在服务器上。 Cookie 数据存放在客户的浏览器上&#xff0c;Session 数据放在服务器上。Session 相比 Cookie 要 更安全一些。由于 Ses…

Chapter1-3_Speech_Recognition(CTC, RNN-T and more)

文章目录1 CTC2 RNN-T3 Neural Transducer4 Monotonic Chunkwise Attention5 小结本文为李弘毅老师【Speech Recognition - CTC, RNN-T and more】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自于李宏毅老师的…

java商城_基于Java,jfinal web框架开发出微信商城,微信分销商城源码分享

项目简介&#xff1a;专门针对微信服务号开发的一套微信商城&#xff0c;微信分销商城&#xff0c;支持商品多规格&#xff0c;支持按地区设置邮费&#xff0c;支持限时打折&#xff0c;订单返现&#xff0c;满减送&#xff0c;满包邮&#xff0c;支持订单打印&#xff0c;订单…

Express 路由模块化以及 Express 应用程序生成器

一、 Express 路由模块化 https://expressjs.com/en/guide/routing.html Express 中允许我们通过 express.Router 创建模块化的、可挂载的路由处理程序。 1、新建一个 user.js 配置如下代码 var express require(express) var router express.Router() router.get(/, fun…

qscrollarea 设置滚动位置_爱剪辑:影视剧滚动字幕片尾,效果竟然如此高端精美...

大家好今天教大家制作滚动字幕片尾这种效果经常在影视剧和自媒体中看到不仅好看精美&#xff0c;而且还高大上快来学习吧&#xff5e;视频教程&#xff1a;爱剪辑&#xff1a;影视剧滚动字幕片尾教程https://www.zhihu.com/video/1174030334688632832移动视频的位置导入视频后&…

iOS 测试三方 KIF 的那些事

一&#xff1a; KIF 三方库的配置 今天的广州天气还不错&#xff0c;原本想试试UI测试的&#xff0c;前几天也了解到很多公司都在用 KIF 这这三方框架&#xff01;&#xff01;今天也就试着做做&#xff0c;可就跪在了这个安装上&#xff0c;我用cocopods 导入了 KIF&#xf…