第六讲 Android WiFi与Bluetooth编程基础_第1页
第六讲 Android WiFi与Bluetooth编程基础_第2页
第六讲 Android WiFi与Bluetooth编程基础_第3页
第六讲 Android WiFi与Bluetooth编程基础_第4页
第六讲 Android WiFi与Bluetooth编程基础_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六讲 Android WiFi与Bluetooth 编程基础(jch)王伟 x sh j)共四十三页 一、Android简介(jin ji) Android是开源的移动设备操作系统。支持智能手机、平板电脑、电视等设备。人脸识别功能,用户可以(ky)使用自拍照片设置屏幕锁。基于NFC的Android Beam功能,可以让两部手机在接近4厘米后交换信息。共四十三页 一、Android简介(jin ji) Android的特征在内存和进程管理方面,Android具有自己的运行时和虚拟机。提供了丰富的界面控件。提供轻量级的进程间通讯机制(jzh)Intent,使用跨进程组件通信和发送系统级广播成为可

2、能。提供了Service作为无用户界面、长时间后台运行的组件。支持高效、快速的数据存储方式。共四十三页 一、Android简介(jin ji) Android的特征提供了通用的共享数据接口ContentProvider。支持位置服务和地图应用。支持Widget插件。Android NDK支持使用本地代码(di m)(C或C+)开发应用程序的部分核心模块。共四十三页 一、Android简介(jin ji) Android 体系结构共四十三页 二、Android应用程序 工程(gngchng)目录和文件共四十三页 二、Android应用程序 AndroidManifest.xml共四十三页 二、A

3、ndroid应用程序 AndroidManifest.xmlAndroid程序声明文件(wnjin),包含了Android系统运行Android程序前所必须掌握的重要信息,这些信息包括应用程序名称、图标、包名称、模块组成、授权和SDK最低版本等。manifest元素仅能包含一个application元素,application元素中能够声明Android程序中最重要的四个组成部分,包括Activity、Service、BroadcastReceiver和ContentProvider。共四十三页 二、Android应用程序 AndroidManifest.xmlactivity元素是对Acti

4、vity子类的声明,不在AndroidManifest.xml文件中声明的Activity将不能够在用户界面中显示。 intent-filter中声明了两个子元素action和category,intent-filter使该程序在启动时将MainActivity作为(zuwi)默认启动模块。共四十三页 二、Android应用程序 activity_main.xml是界面布局文件。 res目录是资源目录,Android程序所有的图像、颜色、风格、主题、界面布局和字符串等资源都保存在子目录中。 R.java包含对drawable、layout和values目录内的资源的引用指针,Android程序

5、能够直接(zhji)通过R类引用目录中的资源。共四十三页 二、Android应用程序 MainActivity.java是Android工程向导根据Activity名称创建的java文件。完全可以(ky)手工修改。为了在Android系统上显示图形界面,需要使用代码继承Activity类。并在onCreate()函数中声明需要显示的内容。三位一体:描述文件(AndroidManifest.xml),Java源代码,资源文件。描述文件负责宏观框架,Java负责逻辑(lu j),资源文件负责外观。共四十三页 三、Android生命周期 Android组件ActivityAndroid程序的呈现层,

6、显示可视化的用户界面,并接收与用户交互所产生的界面事件。Android应用程序可以包含一个或多个Activity,一般需要指定一个程序启动(qdng)时显示的Activity。ServiceService一般用于没有用户界面,但需要长时间在后台运行的应用。可公开Service的程序接口,供其它进程调用。共四十三页 三、Android生命周期BroadcaseReceiver用来接收广播消息的组件,不包含任何用户界面。可以启动Activity或者Notification通知用户接收到重要信息。ContentProvider是Android系统提供的一种标准的共享数据的机制(jzh),其他程序通过

7、ContentProvider访问程序的私有数据。Android系统内部提供一些内置的ContentProvider,能够为应用程序提供重要的数据信息。共四十三页 三、Android生命周期 程序生命周期Android进程(jnchng)从启动到终止的所有阶段,也就是Android程序启动到停止的全过程。尽可能地不主动终止应用程序,即使生命周期结束的程序也会保存在内存中,以便再次快速启动。Android系统的进程优先级共四十三页 三、Android生命周期 Activity生命周期指Activity从启动到销毁的过程。Activity表现为四种(s zhn)状态活动状态暂停状态停止状态非活动状

8、态共四十三页 三、Android生命周期Activity栈共四十三页 三、Android生命周期Activity生命周期的事件(shjin)回调函数函数是否可终止说明onCreate()否Activity启动后第一个被调用的函数,常用来进行Activity的初始化,例如创建View、绑定数据或恢复信息等。onStart()否当Activity显示在屏幕上时,该函数被调用。onRestart()否当Activity从停止状态进入活动状态前,调用该函数。onResume()否当Activity可以接受用户输入时,该函数被调用。onPause()否当Activity进入暂停状态时,该函数被调用。主要

9、用来保存持久数据、关闭动画、释放CPU资源等。该函数中的代码必须简短,因为另一个Activity必须等待该函数执行完毕后才能显示在界面上。onStop()是当Activity不对用户可见后,该函数被调用,Activity进入停止状态。onDestroy()是在Activity被终止前,即进入非活动状态前,该函数被调用。有两种情况该函数会被调用:(1)当程序主动调用finish()函数;(2)程序被Android系统终结。共四十三页 三、Android生命周期Activity事件回调函数(hnsh)的调用顺序共四十三页 三、Android生命周期onRestoreInstanceState()o

10、nSaveInstanceState()函数说明onSaveInstanceState()暂停或停止Activity前调用该函数,用以保存Activity的临时状态信息。onRestoreInstanceState()恢复onSaveInstanceState()保存的Activity状态信息。共四十三页 三、Android 生命周期 Fragment生命周期在Activity中嵌入小Activity,然后(rnhu)每个小Activity又可以拥有自己的布局。共四十三页 三、Android生命周期当一个fragment被创建(chungjin)的时候,它会经历以下状态:onAttach()o

11、nCreate()onCreateView()onActivityCreated()当这个fragment对用户可见的时候,它会经历以下状态:onStart()onResume()共四十三页 三、Android生命周期当这个fragment对用户不可见(kjin)的时候,它会经历以下状态:onPause()onStop()当这个fragment被销毁了(或者持有它的activity被销毁了),它会经历以下状态:onPause()onStop()onDestroyView()onDestroy() onDetach()共四十三页 三、Android生命周期fragments的大部分状态都和act

12、ivitie很相似,但fragment有一些新的状态。onAttached(),当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。onCreateView(),当activity要得到(d do)fragment的layout时,调用此方法,fragment在其中创建自己的layout。onActivityCreated(),当activity的onCreated()方法返回后调用此方法onDestroyView(),当fragment中的布局被移除的时候,调用这个方法。onDetach(),当fragment和activity分离的时候,调用这个

13、方法。共四十三页 四、WiFi程序设计(chn x sh j) Android的WiFi架构(ji u)Client调用方式WiFi的内核驱动程序wpa_supplicant程序WPA适配层WiFi的JNI.wifi包Settings、WifiSwitcher等应用内核空间C框架层Java框架层Java应用层共四十三页 四、WiFi程序设计(chn x sh j)wpa_supplicantWPA(WiFi Protected Access),是一种基于标准的可互操作的WLAN安全性增强解决方案。wpa_supplicant是WPA的应用层认证客户端,负责完成认证相关的登录、加密等工作。wpa

14、_supplicant适配层对wpa_supplicant进行封装,在android中作为WiFi部分的硬件抽象层使用。主要用于封装与wpa_supplicant守护进程(jnchng)的通信,以提供给android框架使用,它实现了加载、控制和消息监控等功能。共四十三页 四、WiFi程序设计(chn x sh j) WiFi的Java和JNIJNI是Java Native Interface的缩写,它提供了若干的API实现了和Java和其他语言的通信(主要是C & C+)。API通过调用wpa_supplicant适配层的接口实现。WiFi系统Java部分的核心(hxn)是根据IWifiMa

15、nager接口创建的Binder服务器端和客户端,服务器端是WifiService,客户端是WifiManager。共四十三页 四、WiFi程序设计(chn x sh j) .wifi包中的主要类WifiManager,提供主要的API来管理WiFi连接的的各个方面。主要完成的功能有:(1) 处理(chl)已配置好的WiFi网络连接列表,可以查看和修改这个列表,列表中项的属性也可以修改;(2) 处理当前激活的WiFi网络连接,包括建立连接,关闭连接,查询网络状态等;(3) 获得AP扫描结果,这个结果包括了足够的信息,依据这些信息可以决定要接入的AP;(4) 定义了一系列Intent actio

16、n,用于广播WiFi状态的改变。共四十三页 四、WiFi程序设计(chn x sh j)ScanResult描述扫描(somio)到的AP信息,包括AP的地址、SSID、身份认证、频率和信号强度等。WifiConfiguration表示已配置好的WiFi网络连接,包括安全配置信息。WifiInfo描述已激活的或者正在建立的WiFi连接状态。共四十三页 四、WiFi程序设计(chn x sh j) WiFi连接(linji)流程begin if (设备(手机)的WiFi功能未打开) 打开WiFi; 扫描AP; 输出扫描结果; /* 扫描结果是一个AP列表 */ /* 连接指定的AP */ if

17、(ssid1 已配置好的WiFi网络连接列表) /* ssid1是指定AP的SSID */ 在已配置好的WiFi网络连接列表中查询ssid1的网络ID; 用查询到的ssid1的网络ID连接ssid1; else 将ssid1的信息添加进已配置好的WiFi网络连接列表,同时得到ssid1的网络ID; 用ssid1的网络ID连接ssid1; 输出当前WiFi连接信息; 断开连接;end共四十三页 五、Bluetooth程序设计(chn x sh j) Android的蓝牙(ln y)架构蓝牙驱动(UART、USB等)蓝牙协议层bluezbluez适配层android.bluetooth包蓝牙Set

18、tings内核空间C框架层Java框架层Java应用层Headset/Handsfree电话相关用户空间D-BUSSCO, Rfcomm SocketHCI等socket共四十三页 五、Bluetooth程序设计(chn x sh j) 蓝牙用户空间库bluezLinux平台上一套完整的蓝牙协议栈开源实现。bluez底层协议实现在kernel代码中,不属于用户空间。bluez通过D-BUS IPC机制来提供应用层接口。D-BUS是一套应用广泛(gungfn)的IPC机制,支持更系统化的服务名、函数名等,同时也能对众多的服务进程和客户端进行管理,调度通信消息的传递。共四十三页 五、Bluetoo

19、th程序设计(chn x sh j) bluez适配层封装了蓝牙的开关功能及射频开关。 蓝牙的JNI及Java部分蓝牙设备(shbi)的发现、配对和服务查找等基础功能。Android.bluetooth包:服务器端BluetoothDeviceService,客户端BluetoothDevice。共四十三页 五、Bluetooth程序设计(chn x sh j)Android蓝牙Java部分(b fen)和底层的关系bluezBluetoothDevicebluez适配层BluetoothDeviceService.JNID-BUSBluetoothDeviceService.JNIBluet

20、oothEventLoopBluetoothDeviceServiceD-BUSandroid.bluetoothIBluetoothDevice共四十三页 五、Bluetooth程序设计(chn x sh j)Android.bluetooth包类说明BluetoothAdapter蓝牙适配器(本地蓝牙适配器)BluetoothClass蓝牙类(主要包括服务和设备)BluetoothClass.Device蓝牙设备类BluetoothClass.Device.Major蓝牙设备管理BluetoothClass.Service蓝牙服务类BluetoothDevice蓝牙设备(主要指远程蓝牙设备

21、)BluetoothServerSocket监听蓝牙连接的类BluetoothSocket蓝牙连接类共四十三页 五、Bluetooth程序设计(chn x sh j) 蓝牙程序设计步骤(bzhu)取得蓝牙适配器BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();if (mBluetoothAdapter = null) / Device does not support Bluetooth打开蓝牙if (!mBluetoothAdapter.isEnabled() Intent enableBtIn

22、tent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);共四十三页 五、Bluetooth程序设计(chn x sh j)使蓝牙(ln y)可发现Intent discoverableIntent = newIntent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DIS

23、COVERABLE_DURATION, 300);startActivity(discoverableIntent);搜索周边蓝牙设备查询已配对的蓝牙设备Set pairedDevices = mBluetoothAdapter.getBondedDevices();/ If there are paired devicesif (pairedDevices.size() 0) / Loop through paired devices for (BluetoothDevice device : pairedDevices) / Add the name and address to an a

24、rray adapter to show in a ListView mArrayAdapter.add(device.getName() + n + device.getAddress(); 共四十三页 五、Bluetooth程序设计(chn x sh j)搜索其它(qt)蓝牙设备mBluetoothAdapter.startDiscovery();/ Create a BroadcastReceiver for ACTION_FOUNDprivate final BroadcastReceiver mReceiver = new BroadcastReceiver() public voi

25、d onReceive(Context context, Intent intent) String action = intent.getAction(); / When discovery finds a device if (BluetoothDevice.ACTION_FOUND.equals(action) / Get the BluetoothDevice object from the Intent BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); / Add the name and address to an array adapter to show in a ListView mArrayAdapter.add(device.getName() + n + device.getAddress(); ;/ Register the BroadcastReceiverIntentFilter filter

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论