Android蓝牙连接总结

时间:2019-05-15 06:42:29下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《Android蓝牙连接总结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《Android蓝牙连接总结》。

第一篇:Android蓝牙连接总结

蓝牙连线时首先会定义一个专门用来连接的函数体BtconnectDevice,当按下Btconnect(为一个Buttton名时)时,程序会判断此时Btconnect键是什么状态,当Btconnect键为连接状态时,因为按了Btconnect键程序会断开蓝牙连接(调用BtconnectDevice函数,注意此函数为有参函数,实参为蓝牙设备的连接地址),并且在Btconnect上显示connect(代表此时用户可以点选Btconnect连接蓝牙);当Btconnect键为断开状态时(程序通过判断Btconnect上的字符是否为connect来判断,因为断开蓝牙连接时,会让Btconnect上显示connect),此时按下Btconnect时,程序会连接蓝牙设备(把实参DeviceMAC传给形参MACaddrofBTDevice,调用BtconnectDevice函数,但此时不知道DeciceMAC是否有数据,代表所以先要判断,当DeviceMAC大于0时,DeciceMAC内有数据,可以连接,否则没有,则不能连接)。

当程序打开时,设备会执行初始化程序(Screen1.initialize,每当程序页面返回主界面时,此函数即执行一次,现在这样理解),在程序中,首先要Btconnect按键功能失效(致Btconnect.Enable为False),然后把数据库TinyDB1中标签名为StoredDevice处存储的的蓝牙设备地址给DeviceMAC(相当于数组,TinyDB1相当于数组名,StoredDevice相当于数组下标,DeviceMAC为一个全局变量,各个程序模块可分别调用它,并修改它,修改后的数据会影响别的程序模块,不像局部变量,在这个程序中修改了变量,对别的程序不影响,APP Inventor中各个模块程序中即使是局部变量,变量名也不可以相同,C和C++就不是这样),然后程序去调用蓝牙设备配对函数(lsDevicePaired)判断是否与DeviceMAC这个设备地址配对上了,如果已配对成功,程序会首先使Btconnect按钮功能可使用,同时lstDevice上显示已配对的蓝牙MAC地址;如果没配对成功,则首先会清空DeviceMAC这个变量和StoredDevice处的数据,并通过调用Notifier.ShowAlert函数来显示配对失败。请注意初始化程序中没有使用蓝牙连接函数,它所要做的就是判断Btconnect是否可使用,如果已配对成功,则Btconnect可使用,用户可通过按此键来连接蓝牙设备。

检查错误函数,是在程序中发现错误时,程序会在屏幕上显示相关错误信息,供用户查看信息,从而准确的查出错误。

当要选择连接哪一个蓝牙设备时,按下lstDevice但没有选择弹出来的项目时(要调用蓝牙函数BluetoothClient1.AddressesAndNames,才能知道是否有蓝牙设备)会调用lstDevice.BeforePicking函数。此函数首先会断开蓝牙连接,然后在Btconnect上显示connect,表示蓝牙现在可连接,然后调用蓝牙函数BluetoothClient1.AddressesAndNames,将可用的蓝牙设备名称和地址放到 lstDevice列表中。然后用户点选lstDevice列表中的项目,程序会调用lstDeviceAfterPicking函数。函数中会将刚才点选的数据,放到DeviceMAC和TinyDB1中的StoredDevice中,lstDevice会显示连接的蓝牙设备的地址和MAC地址,然后使能Btconnect。

仅供参考,如有错误,还是以实际操作结果为准。

第二篇:Android蓝牙开发小结

学习之前先了解两个基本概念:

一、RFCOMM协议:

一个基于欧洲电信标准协会ETSI07.10规程的串行线性仿真协议。此协议提供RS232控制和状态信号,如基带上的损坏,CTS以及数据信号等,为上层业务(如传统的串行线缆应用)提供了传送能力。

RFCOMM是一个简单传输协议,其目的是针对如何在两个不同设备上的应用之间保证一条完整的通信路径,并在它们之间保持一通信段。

RFCOMM是为了兼容传统的串口应用,同时取代有线的通信方式,蓝牙协议栈需要提供与有线串口一致的通信接口而开发出的协议。RFCOMM协议提供对基于L2CAP协议的串口仿真,基于ETSI07.10。可支持在两个BT设备之间同时保持高达60路的通信连接。

RFCOMM只针对直接互连设备之间的连接,或者是设备与网络接入设备之间的互连。通信两端设备必须兼容于RFCOMM协议,有两类设备:DTE(Data Terminal Endpoint,通信终端,如PC,PRINTER)和DCE(Data Circuit Endpoint,通信段的一部分,如Modem)。此两类设备不作区分。

二、MAC硬件地址

MAC(Medium/MediaAccess Control, 介质访问控制)MAC地址是烧录在NetworkInterfaceCard(网卡,NIC)里的.MAC地址,也叫硬件地址,是由48比特长(6字节),16进制的数字组成.0-23位叫做组织唯一标志符(organizationally unique,是识别LAN(局域网)节点的标识.24-47位是由厂家自己分配。其中第40位是组播地址标志位。网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写),它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址。

Android平台提供的蓝牙API去实现蓝牙设备之间的通信,蓝牙设备之间的通信主要包括了四个步骤:设置蓝牙设备、寻找局域网内可能或者匹配的设备、连接设备和设备之间的数据传输。以下是建立蓝牙连接的所需要的一些基本类:

BluetoothAdapter类:代表了一个本地的蓝牙适配器。它是所有蓝牙交互的的入口点。利用它你可以发现其他蓝牙设备,查询绑定了的设备,使用已知的MAC地址实例化一个蓝牙设备和建立一个BluetoothServerSocket(作为服务器端)来监听来自其他设备的连接。

BluetoothDevice类:代表了一个远端的蓝牙设备,使用它请求远端蓝牙设备连接或者获取远端蓝牙设备的名称、地址、种类和绑定状态。(其信息是封装在bluetoothsocket中)。

Bluetoothsocket类:代表了一个蓝牙套接字的接口(类似于tcp中的套接字),它是应用程序通过输入、输出流与其他蓝牙设备通信的连接点。

Blueboothserversocket类:代表打开服务连接来监听可能到来的连接请求(属于server端),为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。当远端设备发起连接连接请求的时候,并且已经连接到了的时候,Blueboothserversocket类将会返回一个bluetoothsocket。

Bluetoothclass类:描述了一个蓝牙设备的一般特点和能力。它的只读属性集定义了设备的主、次设备类和一些相关服务。然而,它并没有准确地描述所有该设备所支持的蓝牙文件和服务,而是作为对设备种类来说的一个小小暗示。下面说说具体的编程实现 1.启动蓝牙功能:

首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter,以后你就可以使用该对象了。如果返回为空,the story is over。例如:

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();if(mBluetoothAdapter == null){ // Device does not support Bluetooth } 其次,调用isEnabled()来查询当前蓝牙设备的状态,如果返回为false,则表示蓝牙设备没有开启,接下来你需要封装一个ACTION_REQUEST_ENABLE请求到intent里面,调用startActivityForResult()方法使能蓝牙设备,例如:

if(!mBluetoothAdapter.isEnabled()){ Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);}

2.查找设备:

使用BluetoothAdapter类里的方法,你可以查找远端设备(大概十米以内)或者查询在你手机上已经匹配(或者说绑定)的其他手机了。当然需要确定对方蓝牙设备已经开启或者已经开启了“被发现使能”功能(对方设备是可以被发现的是你能够发起连接的前提条件)。如果该设备是可以被发现的,会反馈回来一些对方的设备信息,比如名字、MAC地址等,利用这些信息,你的设备就可以选择去向对方初始化一个连接。

如果你是第一次与该设备连接,那么一个配对的请求就会自动的显示给用户。当设备配对好之后,他的一些基本信息(主要是名字和MAC)被保存下来并可以使用蓝牙的API来读取。使用已知的MAC地址就可以对远端的蓝牙设备发起连接请求。

匹配好的设备和连接上的设备的不同点:匹配好只是说明对方设备发现了你的存在,并拥有一个共同的识别码,并且可以连接。连接上:表示当前设备共享一个RFCOMM信道并且两者之间可以交换数据。也就是是说蓝牙设备在建立RFCOMM信道之前,必须是已经配对好了的。

3.查询匹配好的设备:

在建立连接之前你必须先查询配对好了的蓝牙设备集(你周围的蓝牙设备可能不止一个),以便你选取哪一个设备进行通信,例如你可以你可以查询所有配对的蓝牙设备,并使用一个数组适配器将其打印显示出来:

Set pairedDevices = mBluetoothAdapter.getBondedDevices();// If there are paired devices if(pairedDevices.size()> 0){ //Loop through paired devices for(BluetoothDevice device : pairedDevices){ // Add the name and address to an array adapter to show in a ListView mArrayAdapter.add(device.getName()+ “n” + device.getAddress());} 建立一个蓝牙连接只需要MAC地址就已经足够了。

4.扫描设备:

扫描设备,只需要简单的调用startDiscovery()方法,这个扫描的过程大概持续是12秒,应用程序为了ACTION_FOUND动作需要注册一个BroadcastReceiver来接受设备扫描到的信息。对于每一个设备,系统都会广播ACTION_FOUND动作。例如: // Create a BroadcastReceiver for ACTION_FOUND private final BroadcastReceiver mReceiver = new BroadcastReceiver(){ public 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());} } };// Register the BroadcastReceiver IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);registerReceiver(mReceiver, filter);// Don't forget to unregister during onDestroy 注意:扫描的过程是一个很耗费资源的过程,一旦你找到你需要的设备之后,在发起连接请求之前,确保你的程序调用cancelDiscovery()方法停止扫描。显然,如果你已经连接上一个设备,启动扫描会减少你的通信带宽。

5.使能被发现:Enabling discoverability 如果你想使你的设备能够被其他设备发现,将ACTION_REQUEST_DISCOVERABLE动作封装在intent中并调用startActivityForResult(Intent, int)方法就可以了。他将在不使你应用程序退出的情况下使你的设备能够被发现。缺省情况下的使能时间是120秒,当然你可以可以通过添加EXTRA_DISCOVERABLE_DURATION字段来改变使能时间(最大不超过300秒,这是出于对你设备上的信息安全考虑)。例如: Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);startActivity(discoverableIntent);运行该段代码之后,系统会弹出一个对话框来提示你启动设备使能被发现(此过程中如果你的蓝牙功能没有开启,系统会帮你开启),并且如果你准备对该远端设备发现一个连接,你不需要开启使能设备被发现功能,因为该功能只是在你的应用程序作为服务器端的时候才需要。

6.连接设备:

在应用程序中,想建立两个蓝牙设备之间的连接,必须实现客户端和服务器端的代码(因为任何一个设备都必须可以作为服务端或者客户端)。一个开启服务来监听,一个发起连接请求(使用服务器端设备的MAC地址)。当他们都拥有一个蓝牙套接字在同一RFECOMM信道上的时候,可以认为他们之间已经连接上了。服务端和客户端通过不同的方式或其他们的蓝牙套接字。当一个连接监听到的时候,服务端获取到蓝牙套接字。当客户可打开一个FRCOMM信道给服务器端的时候,客户端获取到蓝牙套接字。

注意:在此过程中,如果两个蓝牙设备还没有配对好的,android系统会通过一个通知或者对话框的形式来通知用户。RFCOMM连接请求会在用户选择之前阻塞。如下图:

7.服务端的连接:

当你想要连接两台设备时,一个必须作为服务端(通过持有一个打开的BluetoothServerSocket),目的是监听外来连接请求,当监听到以后提供一个连接上的BluetoothSocket给客户端,当客户端从BluetoothServerSocket得到BluetoothSocket以后就可以销毁BluetoothServerSocket,除非你还想监听更多的连接请求。

建立服务套接字和监听连接的基本步骤:

首先通过调用listenUsingRfcommWithServiceRecord(String, UUID)方法来获取BluetoothServerSocket对象,参数String代表了该服务的名称,UUID代表了和客户端连接的一个标识(128位格式的字符串ID,相当于PIN码),UUID必须双方匹配才可以建立连接。其次调用accept()方法来监听可能到来的连接请求,当监听到以后,返回一个连接上的蓝牙套接字BluetoothSocket。最后,在监听到一个连接以后,需要调用close()方法来关闭监听程序。(一般蓝牙设备之间是点对点的传输)

注意:accept()方法不应该放在主Acitvity里面,因为它是一种阻塞调用(在没有监听到连接请求之前程序就一直停在那里)。解决方法是新建一个线程来管理。例如: private class AcceptThread extends Thread { private final BluetoothServerSocket mmServerSocket;public AcceptThread(){ // Use a temporary object that is later assigned to mmServerSocket, // because mmServerSocket is final BluetoothServerSocket tmp = null;try { // MY_UUID is the app's UUID string, also used by theclient code tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);} catch(IOException e){ } mmServerSocket = tmp;} public void run(){ BluetoothSocket socket = null;// Keep listening until exception occurs or a socket is returned while(true){ try { socket = mmServerSocket.accept();} catch(IOException e){ break;} // If a connection was accepted if(socket!= null){ // Do work to manage the connection(in a separate thread)manageConnectedSocket(socket);mmServerSocket.close();break;} } } /** Will cancel the listening socket, and cause the thread to finish */ public void cancel(){ try { mmServerSocket.close();} catch(IOException e){ } } }

8.客户端的连接:

为了初始化一个与远端设备的连接,需要先获取代表该设备的一个BluetoothDevice对象。通过BluetoothDevice对象来获取BluetoothSocket并初始化连接,具体步骤:

使用BluetoothDevice对象里的方法createRfcommSocketToServiceRecord(UUID)来获取BluetoothSocket。UUID就是匹配码。然后,调用connect()方法来。如果远端设备接收了该连接,他们将在通信过程中共享RFFCOMM信道,并且connect()方法返回。例如: private class ConnectThread extends Thread { private final BluetoothSocket mmSocket;private final BluetoothDevice mmDevice;public ConnectThread(BluetoothDevice device){ // Use a temporary object that is later assigned to mmSocket, // because mmSocket is final BluetoothSocket tmp = null;mmDevice = device;// Get a BluetoothSocket to connect with the given BluetoothDevice try { // MY_UUID is the app's UUID string, also used by the server code tmp = device.createRfcommSocketToServiceRecord(MY_UUID);} catch(IOException e){ } mmSocket = tmp;}

public void run(){ // Cancel discovery because it will slow down the connection mAdapter.cancelDiscovery();try { // Connect the device through the socket.This will block // until it succeeds or throws an exception mmSocket.connect();} catch(IOException connectException){ // Unable to connect;close the socket and get out try { mmSocket.close();} catch(IOException closeException){ } return;} // Do work to manage the connection(in a separate thread)manageConnectedSocket(mmSocket);}

注意:conncet()方法也是阻塞调用,一般建立一个独立的线程中来调用该方法。在设备discover过程中不应该发起连接connect(),这样会明显减慢速度以至于连接失败。且数据传输完成只有调用close()方法来关闭连接,这样可以节省系统内部资源。

9.管理连接(主要涉及数据的传输):

当设备连接上以后,每个设备都拥有各自的BluetoothSocket。现在你就可以实现设备之间数据的共享了。

1> 首先通过调用getInputStream()和getOutputStream()方法来获取输入输出流。然后通过调用read(byte[])和write(byte[]).方法来读取或者写数据。

2> 实现细节:以为读取和写操作都是阻塞调用,需要建立一个专用现成来管理。3>

private class ConnectedThread extends Thread { private final BluetoothSocket mmSocket;private final InputStream mmInStream;private final OutputStream mmOutStream;public ConnectedThread(BluetoothSocket socket){ mmSocket = socket;InputStream tmpIn = null;OutputStream tmpOut = null;// Get the input and output streams, using temp objects because // member streams are final try { tmpIn = socket.getInputStream();tmpOut = socket.getOutputStream();} catch(IOException e){ } mmInStream = tmpIn;mmOutStream = tmpOut;} public void run(){ byte[] buffer = new byte[1024];// buffer store for the stream int bytes;// bytes returned from read()// Keep listening to the InputStream until an exception occurs while(true){ try { // Read from the InputStream bytes = mmInStream.read(buffer);// Send the obtained bytes to the UI Activity mHandler.obtainMessage(MESSAGE_READ, bytes,-1, buffer).sendToTarget();} catch(IOException e){ break;} } } /* Call this from the main Activity to send data to the remote device */ public void write(byte[] bytes){ try { mmOutStream.write(bytes);} catch(IOException e){ } } /* Call this from the main Activity to shutdown the connection */ public void cancel(){ try { mmSocket.close();} catch(IOException e){ } } }

第三篇:Android总结

Android四大组件:

Activity—表现屏幕界面

Service—后台服务

BroadcastReceiver—实现广播机制

ContentProvider—实现数据存储

Intent类:用来启动程序并传递信息的类

用于Activity、Receiver、Service之间进行交互的类,通过无参构造方法创建对象,增加其action、category、data、extra等属性进行信息传递,并通过Activity中的startActivity(Intent intent)进行界面的跳转;通过Context中的StartService(Intent intent)进行服务跳转;通过Context中的registerReceive(Intent intent)对广播进行注册,并通过sendBroadcast()进行无序消息发送,或可以通过SendOrderedBroadcast()进行有序的消息发送。Handler类:

用来发送和处理消息,并配合主线程完成UI的更新;消息Message/Runnable传递通过MessageQueue(消息队列,先进先出)进行传递,并通过Lopper进行接收,传递的消息可以为Message对象,也可以是Runnable对象;接收方法通过HandleMessage(Message msg)进行获取。SharedPreferences类:

一般用于第一次登录时的设置,或者是各个界面的一些小型格式设置,如字体等。是本地的小型共享数据库,可以通过Context的静态方法getSharedPreferences获得其对象,对象内的值均为键值对进行储存。通过SharedPreferences对象调用editor()获取SharedPreferences.Editor对象,向共享数据库中增加数据,putString(),并提交数据,commit();通过SharedPreferences对象获取共享数据库中的数据,getString()。

ViewPager:实现界面滑动的类;

通过设置OnPagerChangedListener设置ViewPager的监听事件;

实现流程:

①布局文件中设置ViewPager控件;

②代码中进行绑定控件;

③通过继承PagerAdapter抽象类进行设置适配器,并传递数据源;

④适配器中实现两个抽象方法,两个重写方法:getCount()—获取滑动界面的数量,isViewFromObject()—判断视图是否是来自于Object文件中;重写两个方法,分别为destoryItem—销毁指定位置的视图;InstantiateItem(),设置指定位置的视图;

Timer与TimerTask类:

Timer为计时器的类,通过无参构造方法可以获取对象,通过Timer.schedule(TimerTask task,long time)进行设置多久后执行某任务,当任务执行完后,取消计时的功能,Timer.cancle();TimerTask类为抽象类,实例化时,必须重写run方法;执行的内容,均在run方法中进行设置,并且执行时,已在子线程中进行执行。自定义View:用到的类有Paint、Canvas、Spec、SpecF、Path、View.MeasureSpec、Timer、TimerTask;

抽象类,通过子类继承,获取对象;在布局文件中绑定后,通过代码,设置自定义View的属性;自定义View中,通过重写OnMeasure方法,对布局文件中的尺寸进行测量,并由View中的setMeasureDimenson()方法,进行数据的保存;通过重写Ondraw方法,进行绘图;当需要绘制动态图形时,使用计时器Timer的schedule(TimerTask,long time,delay time2)方法,在time时间后,每隔time2时间,重写执行run方法中的内容;将耗时的操作设置在run方法中,并通过View中的invalidate()方法刷新主线程中的绘的图形,通过postInvalidate()刷新子线程中的图形。数据库:

常用的数据库有Oracle,需要安装和配置的大型收费数据库;MySQL是中型数据库,同样需要安装配置,但不需要收费;Sqlite是小型免费的嵌入式数据库,占用内存低,最新版本为3.0。Sqlite数据库需要通过SqliteDatabaseOpenHelper进行创建数据库,并通过SqliteDatabase进行数据库的操作。辅助类是抽象类,通过继承,重写两个方法,并在子类的构造方法中通过OpenHelper的构造方法(Context context,String SqlName,SqliteDatabase.CursorFactory factory,int version)进行数据库的创建,在onCreate方法中,进行数据库表的创建,在onUpdate中进行数据库的版本更新。在数据库的操作类中,执行exect方法,通过sql语句对数据库进行操作。Create table student(_id integer primary key auto increament ,name text);insert into student(_id,name)values(1,zx);delete from student where _id=1;update student set _id=2 where name=zx;select *from student;ListView、GridView适配器的优化:

将布局文件中的控件进行封装,当视图加载时,判断可变视图是否存在,当不存在时,通过布局文件获取视图,并新建封装类,将地址通过setTag()进行发送;当视图存在时,重复利用地址—getTag()。反射:

存储数据的方式:

共享数据库、数据库、文件、网络、内容提供者

广播:

广播传播时,需要接收者、发送者、广播频道;根据发送者的发送方式不同,分为有序广播、无序广播;有序广播为接收者有接收顺序,根据设置的优先级不同,确定先后顺序,接收者同时也是发送者,向后面的广播发送消息,发送过程中,可以添加信息,也可以停止广播的传输;无序广播,接收者之间无联系,均从发送者处接收信息;广播在传输过程中,不能被添加信息,也不可能被停止。广播在发送前,需要对接收者进行注册,注册方式有两种,动态注册、静态注册。动态注册,是在代码中进行,通过Context对象调用静态方法进行注册,所有的广播均可以用动态注册,其生命周期依赖于应用,相对于静态注册,比较节省内存;静态方法在清单文件中进行注册,部分系统广播不能通过静态注册进行,其生命周期依赖于系统,当系统启动,即运行接收广播,较耗内存。广播接收者需要继承BroadcastReceiver,并实现抽象方法onReceive(),通过回调接口,进行数据的传输。注意:广播发送前,必须进行接收者的注册,并且,当显示跳转时,不需要意图过滤器。安卓布局:九种布局

线性布局,水平或垂直方向两种格式,主要特点为权重,即规定各控件在视图中的占有的比例;

相对布局,相对于父控件或兄弟控件的布局,各控件需指定相对位置; 绝对布局,指定各控件在视图中的绝对位置,几乎不再使用; 表格布局,子布局放在行中,列由控件表示(TableRow); 帧布局:覆盖前面布局的布局,一般用于暂停按钮等; 风格布局:可以跨行、跨列的布局,占满换行;

左右侧滑:可以实现左右侧滑,通过设置主菜单和二级菜单设置左右两个菜单; 下拉刷新:设置下拉刷新、上拉加载的功能; 抽屉布局;

安卓版本及对应的API:

1.6—4;2—7;3—11;4—15;4.3—18;5—20;5.1—21;6—23;7—25; 安卓四层架构:

应用层:Java语言开发,主要从事App开发;

运行库层:Java语言与C语言,View视图、管理类等的开发; 架构层:C语言与Linux语言,各种框架、浏览器等; 内核层:Linux、C语言,开发各种驱动; 安卓四大组件:

Activity:界面,实现程序与用户之间的交换,有自己的生命周期,七个生命周期;4种启动模式 Service:

BroadcastReceive:三要素,发送者、接收者、发送频道(Intent);类型:有序(接收有序,有数据传送,可以拦截数据)、无序广播(相对);注册方式:静态注册,持久监听,占用内存比较高生命周期跟随系统,动态注册(代码中),所有广播都可以动态注册,部分系统广播不能动态注册,临时监听,占用内存较少,生命周期随应用进行;

ContentProvide:不能存放数据,五种存放数据方式之一,特点为:①为数据的获取等操作添加一个统一的接口②可以实现跨应用访问数据;③可以实现Android中通讯录、消息、音频、视频等的访问或操作;通过ContentReceive进行数据的访问,可以对数据进行增删改查操作。

动画: IO流: 序列化: AlertDialog:

Set实现类: 手机电量检测:

自定义SurfaceView:

自定义View:三个构造方法的区别

Message:Handler.obtain/new/Message.obtain

HttpUriConnection访问网络

gride 异步任务 动画

抽象类和接口 反射 克隆 序列化 侧滑的实现 数据库 Socket:

Gson解析

异步任务和子线程区别 WebView 版本更新 照片的圆角化

Collection与Collections Sql语句

MVP框架与MVC: TCP与UDP的区别: 一键分享的流程: Http协议的理解: 不使用框架访问网络: List集合与set集合: 自定义View的流程: 线性布局的特点: ViewPager的原理: 服务的启动方式:

Activity的启动方式: Xml数据解析:

第四篇:Android 个人总结

Android 个人总结

通过本学期的的学习,我知道了android是由google开发的一款手机平台,android的基本架构是基于linux内核,由内核向外的反别为库和应用架构,然后就是我们手机上的可视化应用了,android是一个系统,但是并非是操作系统。

在开发之前,我们首先要搭建一个开发环境,用的是java编程的eclipse,我们从网上下载sdk包,里面包含了android开发常用的工具,android既是手机操作系统,也是跨平台(windows,mac,linux)的开发工具,虽然是使用linux为核心的平台,但是你可以在很多地方感觉到类似做网页开发的感觉。具有本身独特的进程管理方式,完整的上网功能,搭配了google地图,Gmail等服务,即使像我们这些尚未入门的开发者也能开发出自己理想的应用程序来。

刚开始的时候,得知android开发需要使用java语言心里了小小的畏惧,但随着学习的渐渐深入就会发现android平台只是使用了java的语法而已,所以,即使我们不具备java语言开发的基础,也可以放心地加入到android开发当中来。

第一节课,老师向我们详细介绍了开发界面右边窗口的内容,首先是src目录,里面包含了我们开发界面的java文件以及各种我们创建的类组成的开发包。然后是gen目录,里面涵盖的是系统的类文件(如R.java,Buidconfig.java)与android系统的依赖文件(Android Dependencies)。再下来是assets(用户资源文件),里面文件的访问是通过文件路径的形式调用。Bin文件里面包括了res资源文件,android项目配置文件androidmanifest以及我们开发之后产生的后缀为.apk的应用程序文件。Res是系统资源目录,我们要用到得图片资源,颜色资源,字符串资源都在里面。一般的开发都要用到界面文件也包含在里面。

Eclipse具有史上超豪华的手机控件,包括常用的文本文件,文本框,按钮,进度条等,还有特殊形式的email,gmail文本框,在开发过程当中,很多控件都是以拖拉的形式拖拽到开发界面上,大大地减少了我们开发时候的工作量,在配置文件中,我们可以添加各种各样的系统动作,以及系统服务,还可以建立用户自己的文件库。

当我们开发完成的时候,就可以运行手机模拟器,在上面,我们可以像操作当今市场上最流行的android手机一样操作我们的模拟器,可视化的界面可以我们随心所欲地下载我们开发的应用程序到模拟器上,就可以实现步步跟进,想要修改哪里就一目了然了,模拟器上人性化的设计界面大大方便了用户与机器之间的交流。如果我们拥有一部android系统的手机的话,就可以把自己开发的应用程序下到手机上,看到自己的成果,顿生成就感,真的很有乐趣。也加大了我对学习android的信心。

总体来说,学习android就要不怕困难,迎难而上。Android不久可以满足自己的成就感,还可以在未来的生活中找到自己理想的工作。用别人准备好的各种类,包来开发出自己独特风格的应用程序,既省时又省力,何乐而不为呢。在这里,要感谢曾老师对我的栽培和关怀,他教给了我知识,使我在学习的时候少走了很多的弯路,也增加了我对未来工作的信心。

第五篇:Android 课程总结

一、Android开发环境的搭建。

1、Android SDK的安装;

2、ADT的安装和配置;

3、Android 模拟器的配置。

二、编写第一个Android程序───Hello World(1学时)

1、创建一个Android应用程序的步骤;

2、Android 应用程序目录结构;

3、AndroidManidest.xml文件的作用;

4、Android相关资源文件的作用。

三、Activity及Activity和Intent(2学时)

1、Activity的主要作用;

2、创建一个Activity的方法;

3、在AndroidManifest.xml文件中的注册应用Activity的方法;

4、在Activity中添加控件的方法;

5、多个Activity之间的切换;

6、Intent的基本作用;

7、在一个Activity中启动另一个Activity的方法;

8、使用Intent在Activity中传递数据的基本方法。

四、常见控件的使用方法(基础)

1、TextView的使用方法;

2、EditText的使用方法;

3、Button的使用方法;

4、Menu的使用方法。

五、Activity的生命周期(2学时)

1、Activity的七个周期:

① OnCreate();② OnDestroy();③ OnPause();④ OnRestart();⑤ OnResume();⑥ OnStart();⑦ OnStop();

2、Task的基本概念;

3、Activity和Task之间的关系;

4、对话框风格的Activity的使用方法。

六、Activity的布局(3学时)

1、LinearLayout的使用方法;

2、TableLayout的使用方法;

3、LinearLayout和TableLayout的嵌套使用;

4、RelativeLayout的使用方法(重点、难点)

七、常用控件是使用方法二(2学时)

1、RadioGroup和RadioButton的使用方法;

2、CheckBox的使用方法;

3、Toast的基本用法。

4、ProgressBar的使用方法;

5、ListView的用法。

八、Handler的使用方法(2学时)

1、Handler的基本概念;

2、Handler的基本用法;

3、使用Handler更新ProgressBar

4、Handler与线程;

5、Bundle的用法;

6、在新线程中处理消息的方法。

九、SQLite使用方法

1、SQLite介绍;

2、SQLiteOpenHeper使用方法;

3、使用adb访问SQLite

4、增、删、改、查。

十、Android文件下载

1、使用HTTP协议下载文件;

2、将下载的文件写入SDCARD。

十一、Content Provider初步(2学时)

1、Content Provider的基本概念;

2、Uri;

3、Content Provider的实现方法。

十二、XML文件的解析方法

1、什么是SAX;

2、SAX的基本原理;

3、SAX常用接口;

4、SAX解析。

十三、广播机制(2学时)

1、Android的广播机制(图鉴);

2、BroadCastReceive的作用;

3、BroadCastReceive的编写方法;

4、BroadCastReceive的生命周期。

5、注册BroadCastReceive的方法;

6、Android内置BroadCastReceive Actions。

十四、WIFI网络的使用

1、什么是WIFI;

2、获取WIFI网卡的状态;

3、操作WIFI所需要的权限;

4、改变WIFI网卡的状态。

十五、Socket编程

1、什么是Socket;

2、Socket基本通信模型(见图);

3、使用基于TCP协议的Socket;

4、使用基于UDP协议的Socket。

十六、Service

1、Service是什么;

2、Service不是什么;

3、Service的生命周期;

4、启动和停止Service;

下载Android蓝牙连接总结word格式文档
下载Android蓝牙连接总结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    Android方案总结

    一、硬件描述 如上图,应用程序的开发过程中我们使用了飞思卡尔的i.MX51 EVK Hardware。 设备提供的支持如下:多标准音频回放;多标准视频回放;开放的系统支持; 二、软体结构 1、An......

    Android面试总结

    1.activity的生命周期。 activity主要生命周期的方法说明: onCreate(Bundle savedInstanceState):创建activity时调用。设置在该方法中,还以Bundle的形式提供对以前储存的任......

    Android学习总结

    Android学习总结 零零碎碎的总结:1.客户端的功能逻辑不难,UI界面也不难,但写UI花的时间是写功能逻辑的两倍. 2.写代码前的思考过程非常重要,即使在简单的功能,也需要在本子......

    基于Android手机蓝牙控制的智能小车设计(共5则范文)

    基于Android手机蓝牙控制的智能小车设计 摘 要: 基于Android平台,借助于蓝牙通信技术,为无线智能小车的设计提供一种新的研究方法。该设计把蓝牙、无线电子技术、单片机技术和A......

    Android WebView总结(合集)

    Android WebView总结 1、添加权限:AndroidManifest.xml中必须使用许可"Android.permission.INTERNET",否则会出web page not available错误。 2、在要Activity中生成一个WebV......

    Android RIL&Call学习总结

    Android RIL与Call代码学习总结 前言 本文分五部分:Android电信业务系统、RIL、Telephony APP Framework、Phone APP、Android通话简单流程。 1、 Android电信业务系统主要叙......

    Android的学习总结

    Android学习总结 Android的学习总结 现在对于Android的学习已有斗个学期了,但它对我来说其实还是一个大大的谜,还有待我去对它一一揭晓。 在还没有学习Android这门课之前,当听......

    Android实习个人总结

    个人实习总结 专 业: 软件工程班 级: 软件4班学 号: 20122712 姓 名: 魏仁斌 组 别: 第4小组 2015年8月 时间过得真快,在华迪的实习一转眼间实习时间就过了。在这十几天时间里,......