前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 蓝牙4.0代码解析

Android 蓝牙4.0代码解析

作者头像
用户1733354
发布2018-05-22 14:56:10
9950
发布2018-05-22 14:56:10
举报

0,通俗易懂  粗暴的解释Android与蓝牙Ble之间的通信 - android小草 - 博客园

1,Activiy的生命周期

Activity生命周期

2,Android中的onActivityResult和setResult方法,Intent的使用 :

【已解决】Android的蓝牙实例代码中找不到REQUEST_ENABLE_BT  看完下面的内容就理解这儿了。Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

//ACTION_REQUEST_ENABLE:Show a system activity that allows the user to turn on Bluetooth.

startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

//REQUEST_ENABLE_BT:requestCode自己定义,>0即可,解释见下面

在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。这样的数据交流就要用到回调函数onActivityResult。

requestCode 和 resultCode都是返回提出请求的MainActivity结果处理函数onActivityResult()使用的标识,只是requestCode 主要用来标识是MainActivity也就是请求Activity发出的哪个请求,而resultCode则是标识哪个Activity处理并返回的请求。

Intent intent = new Intent(本窗体.this, 跳转的目的窗体.class);

<1>startActivityForResult(Intent intent, int requestCode);

第一个参数:一个Intent对象

第二个参数:如果> = 0,当Activity结束时requestCode将归还在onActivityResult()中。以便确定返回的数据是从哪个Activity中返回

代码写在旧窗体,在旧窗体里new 2个Intent(目的窗体时2个不同的新窗体),requestCode用来区分是向哪个新窗体传消息,当离开旧窗体切换到新窗体时消息显示在新窗体中。新窗体通过Intent EarthIntent = getIntent();String EarthMessage = EarthIntent.getStringExtra("FromEarth");textView.setText(EarthMessage);3句把信息显示在新窗体。

<2>setResult(int resultCode, Intent data)

调用这个方法把Activity想要返回的数据返回到父Activity

第一个参数:当Activity结束时resultCode将归还在onActivityResult()中,一般为RESULT_CANCELED , RESULT_OK。

第二个参数:一个Intent对象,返回给父Activity的数据。

代码写在新窗体,在新窗体里new 1个Intent(目的窗体是旧窗体),把返回信息存入Intent对象,setResult把通过这个Intent对象把信息传给旧窗体。

<3>onActivityResult(int requestCode, int resultCode, Intent data)

第一个参数:这个整数requestCode提供给onActivityResult,是以便确认返回的数据是从哪个Activity返回的。

这个requestCode和startActivityForResult中的requestCode相对应。

第二个参数:这整数resultCode是由子Activity通过其setResult()方法返回。

第三个参数:一个Intent对象,带有返回的数据。

总结:旧窗体通过startActivityForResult(intent, requestCode)方法的requestCode来标识信息(intent中)传给2个不同的新窗体,信息在新窗体中显示;新窗体在自己的窗体类中用setResult(RESULT_OK, intent)方法把信息(intent中)传回旧窗体,旧窗体怎么知道是哪个新窗体的信息哪?在回掉函数onActivityResult(int requestCode, int resultCode, Intent data)中根据requestCode取不同的新窗体传过来的信息进行显示。

Android进阶2之Activity之间数据交流(onActivityResult的用法) - 落日小屋 - 博客频道 - CSDN.NET  例子更形象、清晰

总结:调用startActivityForResult,onActivityResult无响应的问题_雨点点_新浪博客

3,BindService和Started Service都是Service,有什么地方不一样呢:

(1). Started Service中使用StartService()方法来进行方法的调用,调用者和服务之间没有联系,即使调用者退出了,服务依然在进行【onCreate()-  >onStartCommand()->startService()->onDestroy()】,注意其中没有onStart(),主要是被onStartCommand()方法给取代了,onStart方法不推荐使用了。

(2). BindService中使用bindService()方法来绑定服务,调用者和绑定者绑在一起,调用者一旦退出服务也就终止了【onCreate()->onBind()->onUnbind()->onDestroy()】。

深入理解Android的startservice和bindservice - Andye - 博客园

Android中BindService方式使用的理解(转) - Hi

Service的onServiceConnected没有被调用 - android开发实例 - 博客园

bindService是异步调用和Service进行绑定, 如果绑定成功, 则会调用ServiceConnection的onServiceConnected。当调用bindService方法后就会回调Activity的onServiceConnected,在这个方法中会向Activity中传递一个IBinder的实例,Acitity需要保存这个实例。在Service中需要创建一个实现IBinder的内部类(这个内部类不一定在Service中实现,但必须在Service中创建它)。在OnBind()方法中需返回一个IBinder实例,不然onServiceConnected方法不会调用。

4,广播

Android应用程序发送广播(sendBroadcast)的过程分析 - 老罗的Android之旅 - 博客频道 - CSDN.NET

使用registerReceiver注册BroadcastReceiver - 习以常 - 博客园

Android BroadcastReceiver介绍 - yinkai1205的专栏 - 博客频道 - CSDN.NET

Android应用程序注册广播接收器(registerReceiver)的过程分析 - 老罗的Android之旅 - 博客频道 - CSDN.NET

5,回调函数

弄明白Android 接口回调机制 - Android移动开发技术文章_手机开发 - 红黑联盟

android回调函数总结 - elleniou - 博客园

Android学习

谈谈我对Java中CallBack的理解 - CodingMyWorld - 博客园

Service 回调 Activity的方法。 - win2k3net的专栏 - 博客频道 - CSDN.NET

6,Android更新UI的两种方法——handler与runOnUiThread()

Android更新UI的两种方法――handler与runOnUiThread() - 泡在网上的日子

Android:UI更新方法四:在Worker Thread中runOnUiThread直接刷新UI - 混迹于移动互联网和手机行业 - 博客频道 - CSDN.NET

android多线程与界面交互以及runOnUiThread简单应用_灰度空间_新浪博客

7,

实现展开列ExpandableListView的三种方式之SimpleExpandableListAdapter实例 - 剑萧舞蝶的专栏 - 博客频道 - CSDN.NET

8,Characteristic的读写操作

android BluetoothLE 多个 setCharacteristicNotification writeCharacteristic 失效 - 即将踏上社会的人 - 博客园

onCharacteristicChanged 回调问题 - 蓝牙Bluetooth 技术 - 德州仪器在线技术支持社区

用setCharacteristicNotification之前确认Characteristic 属性中是否具备notification功能,如果有还要确认是否禁用了此功能

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.08.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档