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

下载本文档

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

文档简介

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

2、、Android简介 Android的特征提供了通用的共享数据接口ContentProvider。支持位置服务和地图应用。支持Widget插件。Android NDK支持使用本地代码(C或C+)开发应用程序的部分核心模块。 一、Android简介 Android 体系结构 二、Android应用程序 工程目录和文件 二、Android应用程序 AndroidManifest.xml 二、Android应用程序 AndroidManifest.xmlAndroid程序声明文件,包含了Android系统运行Android程序前所必须掌握的重要信息,这些信息包括应用程序名称、图标、包名称、模块组成、

3、授权和SDK最低版本等。manifest元素仅能包含一个application元素,application元素中能够声明Android程序中最重要的四个组成部分,包括Activity、Service、BroadcastReceiver和ContentProvider。 二、Android应用程序 AndroidManifest.xmlactivity元素是对Activity子类的声明,不在AndroidManifest.xml文件中声明的Activity将不能够在用户界面中显示。 intent-filter中声明了两个子元素action和category,intent-filter使该程序在启

4、动时将MainActivity作为默认启动模块。 二、Android应用程序 activity_main.xml是界面布局文件。 res目录是资源目录,Android程序所有的图像、颜色、风格、主题、界面布局和字符串等资源都保存在子目录中。 R.java包含对drawable、layout和values目录内的资源的引用指针,Android程序能够直接通过R类引用目录中的资源。 二、Android应用程序 MainActivity.java是Android工程向导根据Activity名称创建的java文件。完全可以手工修改。为了在Android系统上显示图形界面,需要使用代码继承Activit

5、y类。并在onCreate()函数中声明需要显示的内容。三位一体:描述文件(AndroidManifest.xml),Java源代码,资源文件。描述文件负责宏观框架,Java负责逻辑,资源文件负责外观。 三、Android生命周期 Android组件ActivityAndroid程序的呈现层,显示可视化的用户界面,并接收与用户交互所产生的界面事件。Android应用程序可以包含一个或多个Activity,一般需要指定一个程序启动时显示的Activity。ServiceService一般用于没有用户界面,但需要长时间在后台运行的应用。可公开Service的程序接口,供其它进程调用。 三、Andr

6、oid生命周期BroadcaseReceiver用来接收广播消息的组件,不包含任何用户界面。可以启动Activity或者Notification通知用户接收到重要信息。ContentProvider是Android系统提供的一种标准的共享数据的机制,其他程序通过ContentProvider访问程序的私有数据。Android系统内部提供一些内置的ContentProvider,能够为应用程序提供重要的数据信息。 三、Android生命周期 程序生命周期Android进程从启动到终止的所有阶段,也就是Android程序启动到停止的全过程。尽可能地不主动终止应用程序,即使生命周期结束的程序也会保存

7、在内存中,以便再次快速启动。Android系统的进程优先级 三、Android生命周期 Activity生命周期指Activity从启动到销毁的过程。Activity表现为四种状态活动状态暂停状态停止状态非活动状态 三、Android生命周期Activity栈 三、Android生命周期Activity生命周期的事件回调函数函数是否可终止说明onCreate()否Activity启动后第一个被调用的函数,常用来进行Activity的初始化,例如创建View、绑定数据或恢复信息等。onStart()否当Activity显示在屏幕上时,该函数被调用。onRestart()否当Activity从停止

8、状态进入活动状态前,调用该函数。onResume()否当Activity可以接受用户输入时,该函数被调用。onPause()否当Activity进入暂停状态时,该函数被调用。主要用来保存持久数据、关闭动画、释放CPU资源等。该函数中的代码必须简短,因为另一个Activity必须等待该函数执行完毕后才能显示在界面上。onStop()是当Activity不对用户可见后,该函数被调用,Activity进入停止状态。onDestroy()是在Activity被终止前,即进入非活动状态前,该函数被调用。有两种情况该函数会被调用:(1)当程序主动调用finish()函数;(2)程序被Android系统终结

9、。 三、Android生命周期Activity事件回调函数的调用顺序 三、Android生命周期onRestoreInstanceState()onSaveInstanceState()函数说明onSaveInstanceState()暂停或停止Activity前调用该函数,用以保存Activity的临时状态信息。onRestoreInstanceState()恢复onSaveInstanceState()保存的Activity状态信息。 三、Android 生命周期 Fragment生命周期在Activity中嵌入小Activity,然后每个小Activity又可以拥有自己的布局。 三、An

10、droid生命周期当一个fragment被创建的时候,它会经历以下状态:onAttach()onCreate()onCreateView()onActivityCreated()当这个fragment对用户可见的时候,它会经历以下状态:onStart()onResume() 三、Android生命周期当这个fragment对用户不可见的时候,它会经历以下状态:onPause()onStop()当这个fragment被销毁了(或者持有它的activity被销毁了),它会经历以下状态:onPause()onStop()onDestroyView()onDestroy() onDetach() 三、

11、Android生命周期fragments的大部分状态都和activitie很相似,但fragment有一些新的状态。onAttached(),当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。onCreateView(),当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout。onActivityCreated(),当activity的onCreated()方法返回后调用此方法onDestroyView(),当fragment中的布局被移除的时候,调用这个方法。onDetach(),当fr

12、agment和activity分离的时候,调用这个方法。 四、WiFi程序设计 Android的WiFi架构Client调用方式WiFi的内核驱动程序wpa_supplicant程序WPA适配层WiFi的JNIa.wifi包Settings、WifiSwitcher等应用内核空间C框架层Java框架层Java应用层 四、WiFi程序设计wpa_supplicantWPA(WiFi Protected Access),是一种基于标准的可互操作的WLAN安全性增强解决方案。wpa_supplicant是WPA的应用层认证客户端,负责完成认证相关的登录、加密等工作。wpa_supplicant适配层

13、对wpa_supplicant进行封装,在android中作为WiFi部分的硬件抽象层使用。主要用于封装与wpa_supplicant守护进程的通信,以提供给android框架使用,它实现了加载、控制和消息监控等功能。 四、WiFi程序设计 WiFi的Java和JNIJNI是Java Native Interface的缩写,它提供了若干的API实现了和Java和其他语言的通信(主要是C & C+)。API通过调用wpa_supplicant适配层的接口实现。WiFi系统Java部分的核心是根据IWifiManager接口创建的Binder服务器端和客户端,服务器端是WifiService,客户

14、端是WifiManager。 四、WiFi程序设计 .wifi包中的主要类WifiManager,提供主要的API来管理WiFi连接的的各个方面。主要完成的功能有:(1) 处理已配置好的WiFi网络连接列表,可以查看和修改这个列表,列表中项的属性也可以修改;(2) 处理当前激活的WiFi网络连接,包括建立连接,关闭连接,查询网络状态等;(3) 获得AP扫描结果,这个结果包括了足够的信息,依据这些信息可以决定要接入的AP;(4) 定义了一系列Intent action,用于广播WiFi状态的改变。 四、WiFi程序设计ScanResult描述扫描到的AP信息,包括AP的地址、SSID、身份认证、

15、频率和信号强度等。WifiConfiguration表示已配置好的WiFi网络连接,包括安全配置信息。WifiInfo描述已激活的或者正在建立的WiFi连接状态。 四、WiFi程序设计 WiFi连接流程begin if (设备(手机)的WiFi功能未打开) 打开WiFi; 扫描AP; 输出扫描结果; /* 扫描结果是一个AP列表 */ /* 连接指定的AP */ if (ssid1 已配置好的WiFi网络连接列表) /* ssid1是指定AP的SSID */ 在已配置好的WiFi网络连接列表中查询ssid1的网络ID; 用查询到的ssid1的网络ID连接ssid1; else 将ssid1的信

16、息添加进已配置好的WiFi网络连接列表,同时得到ssid1的网络ID; 用ssid1的网络ID连接ssid1; 输出当前WiFi连接信息; 断开连接;end 五、Bluetooth程序设计 Android的蓝牙架构蓝牙驱动(UART、USB等)蓝牙协议层bluezbluez适配层android.bluetooth包蓝牙Settings内核空间C框架层Java框架层Java应用层Headset/Handsfree电话相关用户空间D-BUSSCO, Rfcomm SocketHCI等socket 五、Bluetooth程序设计 蓝牙用户空间库bluezLinux平台上一套完整的蓝牙协议栈开源实现。

17、bluez底层协议实现在kernel代码中,不属于用户空间。bluez通过D-BUS IPC机制来提供应用层接口。D-BUS是一套应用广泛的IPC机制,支持更系统化的服务名、函数名等,同时也能对众多的服务进程和客户端进行管理,调度通信消息的传递。 五、Bluetooth程序设计 bluez适配层封装了蓝牙的开关功能及射频开关。 蓝牙的JNI及Java部分蓝牙设备的发现、配对和服务查找等基础功能。Android.bluetooth包:服务器端BluetoothDeviceService,客户端BluetoothDevice。 五、Bluetooth程序设计Android蓝牙Java部分和底层的关

18、系bluezBluetoothDevicebluez适配层BluetoothDeviceService.JNID-BUSBluetoothDeviceService.JNIBluetoothEventLoopBluetoothDeviceServiceD-BUSandroid.bluetoothIBluetoothDevice 五、Bluetooth程序设计Android.bluetooth包类说明BluetoothAdapter蓝牙适配器(本地蓝牙适配器)BluetoothClass蓝牙类(主要包括服务和设备)BluetoothClass.Device蓝牙设备类BluetoothClass.

19、Device.Major蓝牙设备管理BluetoothClass.Service蓝牙服务类BluetoothDevice蓝牙设备(主要指远程蓝牙设备)BluetoothServerSocket监听蓝牙连接的类BluetoothSocket蓝牙连接类 五、Bluetooth程序设计 蓝牙程序设计步骤取得蓝牙适配器BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();if (mBluetoothAdapter = null) / Device does not support Bluetooth打开蓝牙i

20、f (!mBluetoothAdapter.isEnabled() Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 五、Bluetooth程序设计使蓝牙可发现Intent discoverableIntent = newIntent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);discoverableIntent.putExtr

21、a(BluetoothAdapter.EXTRA_DISCOVERABLE_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

22、the name and address to an array adapter to show in a ListView mArrayAdapter.add(device.getName() + n + device.getAddress(); 五、Bluetooth程序设计搜索其它蓝牙设备mBluetoothAdapter.startDiscovery();/ Create a BroadcastReceiver for ACTION_FOUNDprivate final BroadcastReceiver mReceiver = new BroadcastReceiver() publ

23、ic void 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();

温馨提示

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

评论

0/150

提交评论