Android Bluetooth開発の基本手順

6245 ワード

この例はandroid demoに基づいている
一般的なソフトウェア開発者にとって、Bluetoothはあまり使われていない.特にAndroidのBluetooth開発では、国内の例ではAndroidがBluetooth開発に2.0バージョンのsdkからサポートを開始することは少ない.また、シミュレータがサポートされていないため、テストには少なくとも2台の携帯電話が必要であるため、多くの技術者の開発を制約している.多くの開発者が今もBluetooth開発の需要があることを考慮して、みんなのために少し回り道をしないで、まず私が蓄積した少しをAndroid Bluetooth開発の経験でみんなと分かち合います!
まず、Bluetoothを操作するには、AndroidManifestにいます.xmlに権限を追加
そして、apiを見ると、AndroidのBluetooth開発に関するすべてのクラスがandroidにあります.bluetoothパッケージの下には、次の図のように8つのクラスしかありません.
必要なのはいくつかだけです
    1.BluetoothAdapter 
Bluetoothアダプタは、Bluetooth Socket接続を確立するまで、Bluetooth Adapterを操作する方法が多く、以下のようによく使われています.
cancelDiscovery()は文字通り、検出をキャンセルします.つまり、デバイスを検索している間にこのメソッドを呼び出すと、検索を続行しません.
disable()Bluetoothをオフにする
enable()Bluetoothを開きます.この方法でBluetoothを開くとプロンプトがポップアップされません.さらに、ユーザーに開くかどうかを尋ねる必要があります.この2行のコードは同じようにBluetoothを開きますが、ユーザーにプロンプトが表示されます.
Intemtenabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enabler,reCode);//同startActivity(enabler);
getAddress()ローカルBluetoothアドレスの取得
getDefaultAdapter()はデフォルトのBluetoothAdapterを取得しますが、実際にはBluetoothAdapterを取得するには、この方法しかありません.
getName()ローカルBluetooth名の取得
getRemoteDevice(String address)Bluetoothアドレスに基づいてリモートBluetoothデバイスを取得
getState()ローカルBluetoothアダプタの現在のステータスを取得します(デバッグの可能性がある場合はもっと必要だと思います)
isDiscovering()は、現在デバイスを検索しているかどうかを判断し、trueを返す
isEnabled()は、Bluetoothが開いているかどうかを判断し、開いている場合はtrueに戻り、そうでない場合はfalseに戻ります.
ListenUsingRfcommWithServiceRecord(String name,UUID uuid)名前に基づいて、UUIDはBluetoothServer Socketを作成して返します.これはBluetoothSocketサーバ側を作成する最初のステップです.
startDiscovery()検索を開始します.これが検索の最初のステップです.
2.BluetoothDevice
名前を見れば、このクラスはBluetoothデバイスを説明しています.
createRfcommSocketToServiceRecord(UUIDuuid)UUIDに基づいて作成し、BluetoothSocketを返します.
getState()Bluetooth状態ここで言うのはBluetooth Adapterのみです.STATE_ON状態でしか傍受できません.具体的にはandrid apiを見ることができます.
この方法はBluetoothDeviceを取得する目的でもあります.BluetoothSocketというクラスの他の方法を作成します.getAddress()、getName()など、BluetoothAdapterと同じです.
    3.BluetoothServerSocket
Bluetoothを除けばおなじみだと思いますが、Socketである以上、方法はそれほど差がないはずです.このクラスでは3つの方法しかない2つのリロードのaccept()と、accept(inttimeout)の違いは、後の方法が時代遅れを指定していることです.注意しなければならないのは、この2つの方法を実行するとき、クライアントからのリクエストが受信されるまで(または期限切れになるまで)、スレッドはブロックされ、新しいスレッドで実行されるべきです!
もう一つ注意したいのは、この2つの方法はいずれも1つのBluetoothSocketを返し、最後の接続もサーバ側とクライアントの2つのBluetoothSocketの接続である.
close()これは言うまでもないでしょう.
 4.BluetoothSocket
BluetoothServerSocketとは対照的に、クライアントの5つの方法で、意外にも使われています
close()、閉じる
接続
getInptuStream()入力フローの取得
getoutputStream()取得出力ストリーム
getRemoteDevice()リモートデバイスを取得します.ここではbluetoothSocket指定接続を取得するリモートBluetoothデバイスを指します.
1、ローカルブルートゥースアダプタを取得する
      BluetoothAdapter mAdapter= BluetoothAdapter.getDefaultAdapter();
2、Bluetoothをオンにする
      if(!mAdapter.isEnabled()){
//ポップアップ・ダイアログ・ボックスはユーザーが後で開くことを提示する
Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enabler, REQUEST_ENABLE);
//ヒントなしに強引に開く
      //mAdapter.enable();
}
3、検索装置1)さっきmAdapterと言いました.startDiscovery()
最初のステップで、戻ってこないBluetoothデバイスを見つけることができますが、どうして見つけたことを知っていますか?下を向いて、焦らないで
2)BroadcastReceiverを定義し、BroadcastReceiverについてはあまり話さないが、今日の議論ではなく、コードは以下の通りである.
    BroadcastReceiver mReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            //    
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                BluetoothDevice device = intent
                        .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

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

                    Log.v(TAG, "find device:" + device.getName()
                            + device.getAddress());
                }
            }
            //    
            else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED
                    .equals(action)) {
                setTitle("    ");
                if (mNewDevicesAdapter.getCount() == 0) {
                    Log.v(TAG, "find over");
                }
            }
        }
    };

このように、新しいデバイスが見つかったり、検索が完了したりした場合、対応する操作は上段コードの2つのifで実行されますが、先に登録することを前提としています.
BroadcastReceiver、具体的なコードは以下の通りです.
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    registerReceiver(mReceiver, filter);
    filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    registerReceiver(mReceiver, filter);

(このコードは、一般的にonCreate()に書かれています.)
4、接続を確立するには、まずAndroid sdk(2.0以上)でサポートされているBluetooth接続はBluetooth Socketで接続を確立する(高い人に指摘されていない)、サーバー側(Bluetooth Server Socket)とクライアント(Bluetooth Socket)は同じUUIDを指定しなければ接続を確立できない.接続を確立する方法はスレッドをブロックするため、サーバ側とクライアントは新しいスレッド接続を開始する必要があります
1)サーバ側:
//UUID形式は「xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        //http://www.uuidgenerator.com申請する
BluetoothServerSocket serverSocket = mAdapter. listenUsingRfcommWithServiceRecord(serverSocketName,UUID); serverSocket.accept();
2)クライアント://BroadcastReceiverでBLuetoothDeviceを取得したのを覚えていますか?BluetoothSocket clienSocket=dcvice. createRfcommSocketToServiceRecord(UUID); clienSocket.connect();
5、データ転送は、以上の操作により既に確立するBluetoothSocketに接続されており、データ転送はストリームの形式1)ストリームinputStream=socketを取得することにほかならない.getInputStream(); outputStream = socket.getOutputStream();2)书き込み、読込これが基础のもので、ここではあまり赘述しないでやっと书き终わって、これは私のこの2日の学习の経験で、Bluetoothの需要がある友达に役に立つことを望みます!また、前にお話ししたように
android.bluetoothの下には8つのクラスがあり、4つのクラスが使用されていません.その4つのクラスで定義されているのは定数です.私も使用していません.
最後に私が見つけたいくつかのBluetoothの例を添付して、ソフトウェア開発に従事することを望んで、特にAndroid開発の友达は後で多く疎通して、多く分かち合います!
補足して、デバイスを検索できるようにします.
Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
startActivityForResult(enabler,REQUEST_DISCOVERABLE);
demoはクライアントとサービス側を含む.それぞれ2つの携帯電話に置くと通信できます.みんなが改めれば使えるはずだ.
http://download.csdn.net/detail/q610098308/8681065これは公式のdemoです.http://download.csdn.net/detail/q610098308/8628675
転載先:https://www.cnblogs.com/sharecenter/p/5621081.html