当前位置:首页 » 安卓系统 » android协议开发

android协议开发

发布时间: 2023-03-19 15:24:50

Ⅰ Android开发之蓝牙(Bluetooth)

在上一篇中有介绍了Wifi与网络连接处理
Android开发之WiFi与网络连接处理
下面,来继续说说Android中蓝牙的基本使用。

Bluetooth是目前使用的最广泛的无线通讯协议之一,主要针对短距离设备通讯(10米),常用于连接耳机、鼠标和移动通讯设备等。

值得一提的是:
android4.2新增了部分新功能,但是对于Bluetooth熟悉的人或许开始头疼了,那就是Android4.2引入了一个新的蓝牙协议栈针BLE。谷歌和Broadcom之间的合作,开发新的蓝牙协议栈,取代了基于堆栈的Bluez。因此市场上出现了老设备的兼容问题,很多蓝牙设备在android4.2手机上不能正常使用。

BluetoothAdapter简单点来说就是代表了本设备(手机、电脑等)的蓝牙适配器对象。

first:we need permission
要操作蓝牙,先要在AndroidManifest.xml里加入权限

**下面来看看如何使用蓝牙。 **↓↓↓****
Demo已就绪:

返回值:如果设备具备蓝牙功能,返回BluetoothAdapter 实例;否则,返回null对象。

打开蓝牙设备的方式:
1.直接调用函数enable()去打开蓝牙设备 ;
2.系统API去打开蓝牙设备,该方式会弹出一个对话框样式的Activity供用户选择是否打开蓝牙设备。

注意: 1.如果蓝牙已经开启,不会弹出该Activity界面。2.在目前大多数Android手机中,是不支持在飞行模式下开启蓝牙的。如果蓝牙已经开启,那么蓝牙的开关 ,状态会随着飞行模式的状态而发生改变。

1. 搜索蓝牙设备
使用BluetoothAdapter的startDiscovery()方法来搜索蓝牙设备
startDiscovery()方法是一个异步方法,调用后会立即返回。该方法会进行对其他蓝牙设备的搜索,该过程会持续12秒。该方法调用后,搜索过程实际上是在一个System Service中进行的,所以可以调用cancelDiscovery()方法来停止搜索(该方法可以在未执行discovery请求时调用)。

系统开始搜索蓝牙设备
^( *  ̄(oo) ̄ ) ^ 系统会发送以下三个广播:

2.扫描设备

3.定义广播接收器接收搜索结果

4.注册广播

获取附近的蓝牙设备

第一步建立连接:首先Android sdk(2.0以上版本)支持的蓝牙连接是通过BluetoothSocket建立连接,服务端BluetoothServerSocket和客户端(BluetoothSocket)需指定同样的UUID,才能建立连接,因为建立连接的方法会阻塞线程,所以服务器端和客户端都应启动新线程连接。

(这里的服务端和客户端是相对来说的)
两个蓝牙设备之间的连接,则必须实现服务端与客户端的机制。
当两个设备在同一个RFCOMM channel下分别拥有一个连接的BluetoothSocket,这两个设备才可以说是建立了连接。

服务端设备与客户端设备获取BluetoothSocket的途径是不同的。
1,服务端设备是通过accepted一个incoming connection来获取的,
2,客户端设备则是通过打开一个到服务端的RFCOMM channel来获取的。

服务端
通过调用BluetoothAdapter的(String, UUID)方法来获取BluetoothServerSocket(UUID用于客户端与服务端之间的配对)

客户端
调用BluetoothService的(UUID)方法获取BluetoothSocket(该UUID应该同于服务端的UUID)。
调用BluetoothSocket的connect()方法(该方法为block方法),如果UUID同服务端的UUID匹配,并且连接被服务端accept,则connect()方法返回。

数据传递,通过以上操作,就已经建立的BluetoothSocket连接了,数据传递无非是通过流的形式
获取流

该类就是关于远程蓝牙设备的一个描述。通过它可以和本地蓝牙设备---BluetoothAdapter连接通信。

好多东西我也不知道怎么描述,下面给出Demo:
刚好有刚学习的小伙伴问我ListView怎么用,那我就用ListView。

源码
RairDemo
GitHub: https://github.com/Rairmmd/android-demo
Coding: https://coding.net/u/Rair/p/RairDemo/git

Ⅱ android bluetooth hid协议的开发求助

Android Bluetooth HID实现详解


Android 关于蓝牙的部分使用的是BlueZ协议栈。但是直到目前2.3.3都没有扩展HID的profile,只是实现了最基本的Handset和d2dp的profile,所以我们的工作涉及到从应用到jni三层的修改,具体修改文件如图所示,绿色表示新建的类,橙色表示修改的类。

一. 本地层


路径:framework/base/core/jni/

参照android_server_BluetoothA2dpService.cpp新建android_server_bluetoothHidServer.cpp。该类中主要是通过dbus对bluez协议栈的访问,dbus 的通用方法都在android_bluetooth_common.cpp中实现,我们做的仅仅是通过dbus_func_args_async调用到bluez提供的input接口。

主要实现以下两个方法函数:

static jboolean connectSinkNative(JNIEnv *env, jobject object, jstring path) {


#ifdef HAVE_BLUETOOTH


LOGV(__FUNCTION__);


if (nat) {


const char *c_path = env->GetStringUTFChars(path, NULL);



bool ret = dbus_func_args_async(env, nat->conn, -1, NULL, NULL, nat,


c_path, "org.bluez.Input", "Connect",


DBUS_TYPE_INVALID);



env->ReleaseStringUTFChars(path, c_path);


return ret ? JNI_TRUE : JNI_FALSE;


}


#endif


return JNI_FALSE;


}



static jboolean disconnectSinkNative(JNIEnv *env, jobject object,


jstring path) {


#ifdef HAVE_BLUETOOTH


LOGV(__FUNCTION__);


if (nat) {


const char *c_path = env->GetStringUTFChars(path, NULL);



bool ret = dbus_func_args_async(env, nat->conn, -1, NULL, NULL, nat,


c_path, "org.bluez.Input", "Disconnect",


DBUS_TYPE_INVALID);



env->ReleaseStringUTFChars(path, c_path);


return ret ? JNI_TRUE : JNI_FALSE;


}


#endif


return JNI_FALSE;


}

这里要注意将该文件添加到AndroidRuntime.cpp和Android.mk中,否则不会编译到动态库中。

此部分编译后最终生成libandroid_runtime.so并替换到system/libs下

二.Framework的java部分

路径framework/base/java/android/server/中添加BluetoothHidService.java文件

路径framework/base/java/android/bluetooth/中添加BluetoothHid.java和IBluetoothHid.aidl文件。


interface IBluetoothHid {


boolean connect(in BluetoothDevice device);


boolean disconnect(in BluetoothDevice device);


int getState(in BluetoothDevice device);


boolean setPriority(in BluetoothDevice device, int priority);


int getPriority(in BluetoothDevice device);


}

BluetoothHid.java中主要的两个方法connect和disconnect间接地通过aidl访问BluetoothHidService。这里主要是实现跨进程并为上层提供可直接访问的方法。

由此framework的主要部分打包生成framework.Jar并最终部署到system/framework里。

三.应用(Settings.apk)

最后需要修改应用部分,应用部分的修改点比较分散,不想框架层那样整块模仿A2DP的样子那么方便,但也不是说jni部分有多么容易。反而对于我这种对C语言不熟悉的人来说,修改jni是最头疼得事了。好在蓝牙HID这部分框架层的修改都是整块进行的,理解上还算比价容易。

总的来说在Settings.apk中要修改的文件主要是这么几个:

LocalBluetoothProfileManager.java这里主要提供一个HID的profile以便应用层访问。建一个HIDProfile的class调用framework中的BluetoothHID。实际上就是通过bender机制调用了BluetoothHidService。

CashedBluetoothDevice中添加显示蓝牙键盘的图标,BluetoothPairingDialog中则需要添加一段蓝牙配对验证处理的代码,我是参照i9000中先弹出一个随机数,然后在键盘中敲入相同的随机数即配对成功,具体实现如下:


// HID


if (isDeviceKeyboard(mDevice)) {


String pin = String.format("%06d", Long.valueOf(Math


.abs(new Random().nextLong() % 1000000L)));


mPairingView.setVisibility(View.GONE);


messageView.setText(getString(


R.string.bluetooth_enter_keyboard_pin_msg, pin, name));



byte[] bytePin = BluetoothDevice.convertPinToBytes(pin);


if (bytePin != null) {


mDevice.setPin(bytePin);


}


}


……


}

转载

Ⅲ 如何学习安卓开发

Android开发学习路线的七大阶段
第一阶段:Java面向对象编程
第二阶段:Java Web开发;
第三阶段:android UI编程;
第四阶段:android网络编程与数据存储
第五阶段:android手机硬件管理;
第六阶段:Android图形编程技术;
第七阶段:Android游戏开发。

Ⅳ 学Android开发的岗位有哪些

Android开发相关职位职责及要求,这里昆明北大青鸟android培训老师http://www.kmbdqn.cn/给我们整理了如下几个岗位。



一.Android开发工程师

岗位职责:

1、Android智能手机平台应用软件的分析、设计、编码和测试

2、智能手机应用相关的技术研究

3、从事与商品化相关的技术支持

任职资格:

1、计算机、通信、电子等相关专业本科以上学历,一年以上工作经验

2、熟悉Linux操作系统

3、具有J2ME或Java开发经验,熟悉ANDROID手机软件架构,熟悉Android平台MMI软件开发

4、了解基本软件开发流程,了解ClearCase/ClearQuest/UML等开发工具

5、具有良好的英文文档编写能力

符合以下条件者优先:

-有智能手机开发经验者优先

-有Linux手机平台开发经验者优先

1、计算机相关专业毕业。

2、两年以上嵌入式系统开发经验,一年以上的ANDROID手机平台经验。

3、要求熟悉ANDROID手机软件架构,精通ANDROID平台MMI软件开发,能独立进行应用程序开发和移植。

4、要求熟悉基本无线协议(如:GSM/GPRS/CDMA和SDL)。

5、喜欢挑战高难度项目。

6、有较好的学习能力、沟通能力,能承受一定的工作压力。

7、具备良好合作态度及团队精神,并富有工作激情、创新力和责任感。

二.Android软件开发工程师

职位描述:

1.Android手机应用软件设计;

2.Android手机应用软件开发;

3.Android手机软件功能测试与验证;

任职要求:

1.掌握Android平台应用软件开发技术;

2.熟悉AdodbAIR编程技术者优先考虑;

3.熟悉c++/Java编程技术;

4.掌握Android系统网络编程能力;

5.Android系统软件开发一年以上工作经验者优先考虑;

6.工作积极、认真、刻苦,具有良好的团队合作精神。

三.Android应用开发工程师

职位描述:

负责Android平台下应用的开发。

职位要求:

1、计算机或相关技术专业的本科及以上学位(或同等学历);

2、丰富的C,C++或Java的编码技能;

3、对软件产品有强烈的责任心;

4、热爱设计编写程序,对IT行业充满激情,有独立的用代码解决问题的能力;

5、熟悉Android应用开发框架,能独立开发高性能的Android应用;

6、熟悉Android平台架构,有Android源码二次开发经验者优先;

7、有APP作品者优先。


Ⅳ 什么是安卓协议

简介
YY协议是怪蜀黍开发的一款以网络封包登入形式的多开软件,

打破了传统的YY多开器只能开几十个号就会很卡的理念,

往往一般家庭电脑普通配置的就可以开大概8000到20000的YY账号。

无需启用多个的YY客户端即可实现YY在线 进入频道刷花 。

是各大工作室 个人 开设花房 兼职 中转站 私服 顶人气 直播间 批量挂皇冠号挂月票号等必备软件。

目前有安卓协议 pc协议 支持购买正版协议。

支持
后台托盘运行 刷花 批量改名 批量修改个性签名 独立IP等功能(批量修改马甲签名、刷花、批量送月票)。

Ⅵ Android开发的分类有哪些

1、Android客户端应用程序
如新浪微博、网银客户端、凡客、淘宝客户端,快盘客户端。Android在这里的应用还是界面层的东西为主。核心还在WEB。客户端界面很重要,用户体验度很重要。从应用需求上来讲,几乎大一点的网站,都需要有手机客户端程序。
2、Android通用类程序
如基于LBS(基于位置的服务)的应用(这类一般会嵌入到客户端应用程序中),流媒体播放应用。由于移动设备的方便便捷、3G、4G网络的发展,这类应用有不错的前景。
3、Android游戏开发
需要掌握的游戏引擎LGame,游戏框架等。手机上的游戏会是一大块内容,有前途。
4、Android底层开发
需要掌握C、Linux等较底层的东西,发展方向应该是驱动、协议开发,嵌入式开发。

Ⅶ android开发SPP经典蓝牙

Android 开发SPP经典蓝牙。

1、传统蓝牙采用的是SPP(Serial Port Profile)协议进行数据传输。

2、SPP的UUID:00001101-0000-1000-8000-00805F9B34FB

3、手机一般以客户端的角色主动连接SPP协议设备

概念:

BluetoothAdapter:

本地蓝牙适配器,是所有蓝牙交互的入口,表示蓝牙设备自身的一个蓝牙适配器,整个系统只有一个蓝牙适配器,通过他可以发现其他蓝牙设备,查询绑定(配对)设备列表,使用MAC地址实例化BluetoothDevice以及创建BluetoothServerSocket用来侦听来自其他设备的通信。

myBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//获取默认的蓝牙Adapter

BluetoothDevice:

远程的蓝牙设备。

private static BluetoothDevice myDevice;

myDevice = myBluetoothAdapter.getRemoteDevice(BDAddr);//获取远程设备,通过蓝牙的MAC地址来获取一个远程对象

两种连接方式

BluetoothSocket

客户端:调用BluetoothDevice的()可以获取该对象;调用connect()方法可以建立连接。

private static BluetoothSocket mySocket = null;

private static final UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

Method m = myDevice.getClass().getMethod("createRfcommSocket", new Class[] {int.class});//由BluetoothDevice衍生出BluetoothSocket, createRfcommSocket来选择连接的服务和协议

mySocket = (BluetoothSocket) m.invoke(myDevice, 1);

BluetoothServerSocket:

服务端:通过BluetoothServerSocket对象可以创建BluetoothSocket对象,调用BluetoothServerSocket的accept()的方法可以得到改对象。

开发流程:

1:声明权限:

<uses-permission android:name="android.permission.BLUETOOTH"/>

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

2:启动和关闭蓝牙

获取蓝牙适配器,使用close()接口可以关闭蓝牙适配器

myBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//获取默认的蓝牙Adapter

启动蓝牙

if (!blueadapter.isEnabled())

        //判断本机蓝牙是否打开

        {//如果没打开,则打开蓝牙

        blueadapter.enable();

        }

3.使用BlueAdatper搜索 

使用bluetoothAdapter搜索设备,bluetoothAdapter.startDiscovery()在搜索过程中,系统会发出三个广播信息: 

ACTION_DISCOVERY_START:开始搜索 

ACTION_DISCOVERY_FINISHED:搜索结束 

ACTION_FOUND:找到设备

if (bluetoothAdapter.isDiscovering()) {

        bluetoothAdapter.cancelDiscovery();//如果蓝牙设备未连接则取消搜索

    }

    bluetoothAdapter.startDiscovery();

}

4:(1)通过注册广播获取搜索到的设备。

IntentFilter intentFilter = new IntentFilter();

intentFilter.addAction(BluetoothDevice.ACTION_FOUND);//找到设备广播

intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);//搜索完成广播

registerReceiver(receiver, intentFilter);//注册广播接收器

// receiver

private final BroadcastReceiver receiver = new BroadcastReceiver(){

    @Override

    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();

        if (BluetoothDevice.ACTION_FOUND.equals(action)) {

            // find a device

            BluetoothDevice device = intent .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

            if (device.getBondState() != BluetoothDevice.BOND_BONDED) {

                //未配对设备

                newDeviceArrayAdapter.add(device.getName() + "\n" + device.getAddress());

            }else {

                //已经配对过的设备

                TextView tvPaired = (TextView)findViewById(R.id.tv_paired);

                tvPaired.setVisibility(View.VISIBLE);

                lvPairedDevices.setVisibility(View.VISIBLE);

                pairedDeviceArrayAdapter.add(device.getName() + "\n" + device.getAddress());

            }

            Log.i(TAG,"name:" + device.getName() + " address"+ device.getAddress());

        } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action){

            // search finish

            Log.i(TAG, "search finish!");

        }

    }

};

(2),直接得到当前的蓝牙设备后,就可用通过遍历pairedDevices ,得到当前手机已经配对过的蓝牙设备。

Set<BluetoothDevice> pairedDevices = myBluetoothAdapter.getBondedDevices();//获取当前蓝牙设备

if (pairedDevices.size() <= 0) return false;

for (BluetoothDevice device : pairedDevices) {

    Map<String, String> map = new HashMap<String, String>();

    map.put("DeviceName", device.getName());

    map.put("BDAddress", device.getAddress());

    list.add(map);

5.建立连接

private static final UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

Method m = myDevice.getClass().getMethod("createRfcommSocket", new Class[] {int.class});//由BluetoothDevice衍生出BluetoothSocket, createRfcommSocket来选择连接的服务和协议

mySocket = (BluetoothSocket) m.invoke(myDevice, 1);

mySocket.connect();//使用BluetoothSocket来连接设备

6.把得到的蓝牙设备给通过点击ListView选择设备。

listView.setOnItemClickListener(new ListView.OnItemClickListener() {

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

        SelectedBDAddress = list.get(arg2).get("BDAddress");

        if (((ListView) arg0).getTag() != null) {

            ((View) ((ListView) arg0).getTag()).setBackgroundDrawable(null);

        }

        ((ListView) arg0).setTag(arg1);

        arg1.setBackgroundColor(Color.BLUE);

        myDevice = myBluetoothAdapter.getRemoteDevice(SelectedBDAddress);

    }

});

7.客户端发送数据

当两个设备成功连接之后,双方都会有一个BluetoothSocket对象,这时,就可以在设备之间传送数据了。

       1.使用getOutputStream()方法来获取输出流来处理传输。

       2.调用write()。

os = socket.getOutputStream();//获取输出流

if (os != null) {//判断输出流是否为空

    os.write(message.getBytes("UTF-8"));

}

os.flush();//将输出流的数据强制提交

os.close();//关闭输出流

}

将输出流中的数据提交后,要记得关闭输出流,否则,可能会造成只能发送一次数据。

8.服务端接收数据

1.使用getInputStream()方法来获取输入流来处理传输。

       2.调用read()。

InputStream im=null;

im=bluetoothSocket.getInputStream();

byte buf[] = new byte[1024];

if (is != null) {

    is.read(buf, 0, buf.length);//读取发来的数据

    String message = new String(buf);//把发来的数据转化为String类型

    BuletoothMainActivity.UpdateRevMsg(message);//更新信息在显示文本框

    is.close();//关闭输入流

使用服务端接收数据时,要先从客户端向服务端发起连接,只有接收到连接请求之后,才会返回一个BluetoothSocket对象。有BluetoothSocket对象才能获取到输入流。

Ⅷ 北大青鸟设计培训:Android开发需要学习哪些内容

随着移动互联网的发展,各种智能手机APP接踵而来,在手机APP应用市场中,数量最多的就是Android开发的手机软件了。
Android开发也成为当下较热门行业。
那么,西安北大青鸟http://www.kmbdqn.cn/就告诉你,想要学习Android开发,需要学习哪些课程?Java面向对象编程1、Java基本数据类型与表达式,分支循环。
2、String和StringBuffer的使用、正则表达式。
3、面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收;构造函数、this关键字、方法和方法的参数传递过程、static关键字、内部类,Java的垃凯旦极回收机制,Javadoc介绍。
4、对象实例化过程、方法的覆盖、final关键字、抽象类、接口、继承的优点和缺点剖析;对象的多态性:子类和父类之间的转换、抽象类和接口在多态中的应用、多态带来的好处。
5、Java异常处理,异常的机制原理。
6、常用的设计模式:Singleton、Template、Strategy模式。
7、JavaAPI介绍:种基本数据类型包装类,System和Runtime类,Date和DateFomat类等。
8、Java集合介绍:Collection、Set、List、ArrayList、Vector、LinkedList、Hashset、TreeSet、Map、HashMap、TreeMap、Iterator、Enumeration等常用集合类API。
9、JavaI/O输入输出流:File和FileRandomAccess类,字节流InputStream和OutputStream,字符流Reader和Writer,以及相应实现类,IO性能分析,字节和字符的转化流,包装流的概念,以及常用包装类,计算机编码。
10、Java高级特性:反射、代理和泛型。
11、多线程原理:如何在程序中创建多线程(Thread、Runnable),线程安全问题,线程的同步,线程之间的通讯、死锁。
12、盯搏扰Socket网络编程。
Javaweb开发1、Java解析XML文件DOM4J。
2、MySql数据库的应用、多表连接查询的应用。
3、Jsp和Servlet应用。
4、Http协议解析。

5、Tomcat服务器的应用配置。
6、WebService服务配置应用。
androidUI编程1、Android开发环境搭建:Android介绍,Android开发环银运境搭建,先进个Android应用程序,Android应用程序目录结构。
2、Android初级控件的使用:TextView控件的使用Button控件的使用方法EditText控件的使用方法ImageView的使用方法RadioButton的使用方法Checkbox的使用方法Menu的使用方法。
3、Android高级控件的使用:Autocompletion的使用方法ListView的使用方法GridView的使用方法Adapter的使用方法Spinner的使用方法Gallary的使用方法ScrollView的使用方法。
4、对话框与菜单的使用:Dialog的基本概念AlertDialog的使用方法DatePickerDialog的使用方法Menu的使用方法自定义Menu的实现方法。
5、控件的布局方法:线性布局的使用方法相对布局的使用方法表格布局的使用方法。
6、多Acitivity管理:AndroidManifest.xml文件的作用,Intent的使用方法,使用Intent传递数据的方法,启动Activity的方法,IntentFilter的使用方法,ActivityGroup的使用方法。
7、自定义控件实现方法:自定义ListView的实现方法,可折叠ListView的使用方法,自定义Adapter的实现方法,自定义View的实现方法,动态控件布局的上实现方法。

热点内容
android系统截屏 发布:2024-05-06 02:57:51 浏览:776
android居左 发布:2024-05-06 02:40:26 浏览:45
网页设置的密码如何删除 发布:2024-05-06 02:20:30 浏览:926
如何查看snmp配置信息 发布:2024-05-06 02:19:48 浏览:489
预科编程 发布:2024-05-06 02:19:42 浏览:140
压缩比英文 发布:2024-05-06 01:56:35 浏览:173
数字php 发布:2024-05-06 01:53:10 浏览:743
编程中怎么 发布:2024-05-06 01:43:32 浏览:630
如何访问远程数据库 发布:2024-05-06 01:39:20 浏览:448
刷算法的网站 发布:2024-05-06 01:30:39 浏览:270