Android中实现跨app之间数据的暴露与接收
例如一个小项目:实现单词本的添加单词等功能
功能:不同的方式实现跨app之间数据的暴露与接收
暴露端app:实现单词的添加(Word、Translate),增删改查;
接收端app:模糊查询,得到暴露端的数据。
暴露端主页及布局:
1、布局:
主页布局:ListView、TextView(empty)
item布局:TextView(单词)、TextView(翻译)
添加或修改单词的Dialog布局:EditText(hint="word")、EditText(hint="translate")
2、菜单:
选项菜单:添加(单词)
上下文菜单:删除、修改(ListView上)
3、主页程序:
初始化MySQLiteOpenHelper(工具类)、初始化控件
数据库的操作、自定义对话框、设置适配器、创建选项菜单、上下文菜单
接收端主页及布局:
1、布局:主页布局:EditText(关键词)、Button(点击查询)、ListView、TextView(empty)
item布局:TextView(单词)、TextView(翻译)
2、主页:初始化控件,解析得到的String返回集合,设置适配器
一、Content-Provider
Provider:
1、自定义Provider继承ContentProvider,重写6个抽象方法
2、定义静态代码块:目的是定义多个Uri地址。
3、声明SQLiteDatabase、MySQLiteOpenHelper,生命周期onCreate()中,实例化
4、重写数据库的增删改查:根据UriMatcher对象的match(uri)方法的返回值进行CRUD
注意:查询的时候,返回的是Uri对象:
long id = dbConn.insert("tb_words",null,values);
Uri uri_id = ContentUris.withAppendedId(uri,id);
5、清单中注册:节点:<provider>:authorities、name、exported
Resolver:
1、定义ContentResolver,及uriString:提供者定义的authorities
resolver=getContentResolver();
2、查询:resolver.query(Uri.parse(uri)-->>返回Cursor
3、如有需求,可使用Loader方法:当提供者数据发生改变时及时更新,
①、实现LoaderManager.LoaderCallbacks<Cursor>:
②、初始化LoaderManager:
loaderManager = getLoaderManager();
loaderManager.initLoader(LOADER_ID, null, this);
③、实现三个方法:
onCreateLoader(){return new CursorLoader(6个参数)}、
onLoadFinished(){adapter.changeCursor(data)}、
onLoaderReset(){adapter.changeCursor(null)}
二、AIDL:Android Interface Define Language
服务端:
1、aidl文件夹-->包-->后缀.aidl-->抽象方法,形参为要传递的数据,返回String
2、自定义服务类,继承Service
①、onCreate()中,初始化helper对象
②、自定义内部类继承自定义的aidl中的Stub,重写一个自定义的抽象方法,其中执行数据库的查操作,得到集合,
可适当的处理集合得到String,以便接收者解析
③、onBind()中,返回new MyBinder()对象
3、清单注册,包含<Intent-filter>节点<action>属性:建议包名.类名
客户端:
1、同服务端第一条,可复制.aidl文件,不建议复制文件夹
2、主页:声明自定义的.aidl的接口,绑定服务:
bindService(intent, conn, BIND_AUTO_CREATE)-->返回boolean,绑定成功否
集齐三个参数intent.setPackage、setAction(包名.类名)、创建conn的时候,重写两个方法,
建立连接时:实例化myInterface等于Stub.asInterface(iBinder),断开连接赋值为null、第三个参数建议为BIND_AUTO_CREATE
3、既然myInterface已经实例化,就可以调用里面的方法,处理返回的数据,加载到ListView上
4、解除绑定
三、Messenger
服务端:
1、自定义服务类继承Service
2、初始化信使、数据库操作工具类对象的声明
3、周期方法onCreate()中:初始化helper对象、信使对象:
Handler handler = new Handler(){//第5步、第6步}
messenger = new Messenger(handler);
4、重写onBind()方法,返回messenger.getBinder()
5、在Handler{}内,对客户端传过来的信息进行事后处理,将处理的消息返回给客户端:
执行查操作(查询条件为,msg.getData().getString()+"%")返回集合,定义Message,what值为1,
携带setData(bundle),Bundle携带String
6、定义信使对象等于msg.replyTo,信使对象发送message
7、清单注册:包含<Intent-filter>节点<action>属性:建议包名.类名
客户端:
1、声明两个信使对象messenger、messenger_reply;
2、bindMyService绑定服务;
bindService(intent, conn,BIND_AUTO_CREATE):集齐三个参数:
intent.setPackage、setAction(包名.类名)、创建conn的时候,重写两个方法,建立连接时:
实例化messenger = new Messenger(service);,
断开连接赋值为null、第三个参数建议为BIND_AUTO_CREATE
3、initMesengerReply初始化返回信使:
Handler handler = new Handler(){//第5步}、messenger_reply = new Messenger(handler);
4、客户端向服务端发送请求信息:
定义Message,msg.setData(bundle),Bundle携带String(查询的关键词)、重点:
msg.replyTo = messenger_reply、messenger.send(msg)
5、返回信使对返回信息进行事后处理:msg.what = 1、
String result = msg.getData().getString("result");
6、处理得到的result加载到listView控件上
Android中实现跨app之间数据的暴露与接收的更多相关文章
- Android中的跨进程通信方法实例及特点分析(一):AIDL Service
转载请注明出处:http://blog.csdn.net/bettarwang/article/details/40947481 近期有一个需求就是往程序中增加大数据的採集点,可是由于我们的Andro ...
- Android中使用Gson解析JSON数据的两种方法
Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下 Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...
- Android中使用File文件进行数据存储
Android中使用File文件进行数据存储 上一篇学到使用SharedPerences进行数据存储,接下来学习一下使用File进行存储 我们有时候可以将数据直接以文件的形式保存在设备中, 例如:文本 ...
- 解剖android中的闹钟app 一
首先,看一看android市场上有哪些主流的闹钟app了,我们来进行一个简单的评测: 一.正点闹钟 这是一款源自金山技术的闹钟app,其主力创始团队都是来自于金山,其装机量,下载量都是排名第一.老样子 ...
- Android中使用Gson解析JSON数据
Android中使用Gson解析JSON数据 在Android中可以使用Gson解析JSON数据 首先,从 code.google.com/p/google-gson/downloads/list ...
- Android中Fragment与Activity之间的交互(两种实现方式)
(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...
- Android中的跨进程通信方法实例及特点分析(二):ContentProvider
1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据.Android系统给我们提供了Content P ...
- iOS中两个APP之间的跳转和通信
app间的跳转 一:在第一个app首先要做下面这些操作: 1.在info.plist文件中的Information Property List下添加一项:URL types. 2.点开URL type ...
- Android中解析JSON形式的数据
1.JSON(JavaScript Object Notation) 定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式, ...
随机推荐
- PHP面向对象(OOP):抽象方法和抽象类(abstract)
在OOP语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法做为外部代码访问其的接口.而抽象方法就是为了方便继承而引入的,我们先来看一下抽象类和抽象方法的定义再说明它的用途. 什么是抽象方 ...
- 隐藏和显示 ng-show ng-hide
<div ng-controller='DeathraymenueController'> <button ng-click="toggleMenue()" ...
- 【C语言】结构组成(函数、语句、注释)
C语言结构组成 一.相关基础知识 二.具体内容 C语言由函数.语句和注释三部分组成: )函数与主函数: 一个C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,一个源程序 ...
- cocos creater 简单的跳跃动作。
因为最近一段时间有打算做一个2D游戏的想法,就顺便学习了一下cocos,很惊异的它的脚本编写语言竟然支持js,正好以前对js有一定的了解,就临时拿起来了. 这是来自官方的一个实例,不过在参考过程中,发 ...
- 原生JS写Ajax的请求函数
一.JS原生ajax ajax:一种请求数据的方式,不需要刷新整个页面:ajax的技术核心是 XMLHttpRequest 对象:ajax 请求过程:创建 XMLHttpRequest 对象.连接服务 ...
- 转:PHP 5.4中的traits
原文来自于:http://www.cnblogs.com/thinksasa/archive/2013/05/16/3081247.html PHP 5.4中的traits,是新引入的特性,中文还真不 ...
- Web.config总结
%windir%/Microsoft.NET/Framework/v2.0.50727/CONFIG目录下machine.config定义了针对当前机器的WinForm程序和asp.net应用程序的配 ...
- cf C. Arithmetic Progression
http://codeforces.com/contest/382/problem/C 题意:给你n个数,然后让你添加一个数使得n+1个数能形成这样的规律,a[1]-a[0]=a[2]-a[1]=a[ ...
- ARM单片机的头文件如何用结构体定义地址
下面我们以ARM Cortex-M0内核单片机LPC1114的头文件lpc11xx.h文件进行说明. 1.先说两句 lpc11xx.h文件是lpc11xx系列单片机包含的头文件.这个文件的作用和51单 ...
- c# 函数相关练习
1.输入一个正整数,求1!+2!+3!+...+n! 2.输入姓名,年龄,工作单位 我叫**,今年**岁了,现在在****工作 要求,在Main函数中接收这三个值 传到函数中打印 3.写一 ...