android里ble与app收发数据,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、清单中注册:节点::authorities、name、exported

Resolver:

1、定义ContentResolver,及uriString:提供者定义的authorities

resolver=getContentResolver();

2、查询:resolver.query(Uri.parse(uri)-->>返回Cursor

3、如有需求,可使用Loader方法:当提供者数据发生改变时及时更新,

①、实现LoaderManager.LoaderCallbacks:

②、初始化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、清单注册,包含节点属性:建议包名.类名

客户端:

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、清单注册:包含节点属性:建议包名.类名

客户端:

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控件上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值