當前位置:首頁 » 安卓系統 » 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的實現方法,動態控制項布局的上實現方法。

熱點內容
解壓到當前文件夾右鍵 發布:2024-04-26 03:57:08 瀏覽:979
html5android教程視頻下載 發布:2024-04-26 03:09:59 瀏覽:867
伺服器的描述是什麼 發布:2024-04-26 03:08:32 瀏覽:394
個人加密 發布:2024-04-26 03:01:23 瀏覽:520
linuxusbgadget 發布:2024-04-26 02:52:54 瀏覽:304
我的世界空島世界伺服器地址 發布:2024-04-26 01:39:08 瀏覽:248
尼爾機械紀元加密 發布:2024-04-26 01:37:11 瀏覽:867
在控制台輸出sql語句 發布:2024-04-26 01:08:12 瀏覽:432
動畫java 發布:2024-04-26 01:02:40 瀏覽:12
得力文件夾5302 發布:2024-04-26 00:21:32 瀏覽:91