藍牙開發(fā)基礎(chǔ)設(shè)置

1.需要的權(quán)限
 <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

第一個權(quán)限是簡單的打開藍牙;第二個權(quán)限是搜索藍牙仰冠、匹配藍牙乏冀、藍牙與藍牙之間傳遞數(shù)據(jù)需要的權(quán)限

2.代碼實例含詳細注釋

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.phonejason.MainActivity">


       <Button
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="手機是否支持藍牙"
           android:id="@+id/is_support_blue_tooth"
           android:onClick="isSupportBlueTooth" />

       <Button
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="藍牙的狀態(tài)"
           android:id="@+id/is_blue_tooth_enable"
           android:onClick="isBlueToothEnable" />

       <Button
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="打開藍牙"
           android:id="@+id/turn_on_blue_tooth"
           android:onClick="requestTurnOnBlueTooth" />

       <Button
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="關(guān)閉藍牙"
           android:id="@+id/turn_off_blue_tooth"
           android:onClick="turnOffBlueTooth" />
</LinearLayout>

藍牙控制器類(BlueToothController)

package com.example.phonejason;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.content.Intent;

/**
 * Created by 小新 on 2016/6/11.
 */
public class BlueToothController {
    //藍牙適配器
    private BluetoothAdapter mAdapter;
    public BlueToothController() {
        //獲取手機的藍牙適配器,如果不為空手機支持藍牙沪停,為空不支持藍牙
        mAdapter = BluetoothAdapter.getDefaultAdapter();
    }

    /**
     * 是否支持藍牙
     * @return true 支持, false 不支持
     */
    public boolean isSupportBlueTooth() {
        if( mAdapter != null ){
            return true;
        }
        else {
            return false;
        }
    }
    /**
     * 判斷當前藍牙狀態(tài)
     * @return true 打開,false 關(guān)閉
     */
    public boolean getBlueToothStatus() {
        //assert斷言:只有為true才會執(zhí)行下去
        assert (mAdapter != null);
        return mAdapter.isEnabled();
    }
    /**
     * 打開藍牙
     * @param activity
     * @param requestCode
     */
//    我們一般打開藍牙會使用到系統(tǒng)提供的一個Activity煤辨。這個Activity的action為:
//      BluetoothAdapter.ACTION_REQUEST_ENABLE裳涛。
//    然后我們要使用startActivityForResult()這個方法來啟動它木张。
//    這個Activity是有返回值的,如果用戶選擇的是打開端三,我們應(yīng)該可以收到一個RESULT_OK
//    如果用戶選擇的是取消舷礼,我們應(yīng)該可以收到一個RESULT_CANCELED。
    public void turnOnBlueTooth(Activity activity, int requestCode) {
        Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        activity.startActivityForResult(intent, requestCode);
//        mAdapter.enable();
    }

    /**
     * 關(guān)閉藍牙
     */
    public void turnOffBlueTooth() {
        mAdapter.disable();
    }
    }

Mainavtivity

package com.example.phonejason;

import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    //請求碼
    public static final int REQUEST_CODE = 0;
    private BlueToothController mController = new BlueToothController();
    private Toast mToast;

    /**
     * 監(jiān)聽藍牙開關(guān)的廣播 監(jiān)聽藍牙狀態(tài)的改變
     */
//    當藍牙的狀態(tài)發(fā)生改變時郊闯,系統(tǒng)是會發(fā)出一個為BluetoothAdapter.ACTION_STATE_CHANGED的廣播妻献。
//    該廣播攜帶兩個參數(shù),一個是BluetoothAdapter.EXTRA_PREVIOUS_STATE团赁,表示之前的藍牙狀態(tài)育拨。
//    另一個是BluetoothAdapter.EXTRA_STATE,表示當前的藍牙狀態(tài)欢摄。而它們的值為以下四個:
//    BluetoothAdapter.STATE_TURNING_ON;
//    BluetoothAdapter.STATE_ON;
//    BluetoothAdapter.STATE_TURNING_OFF;
//    BluetoothAdapter.STATE_OFF;
//    分別代表熬丧,打開中,已打開怀挠,關(guān)閉中析蝴,已關(guān)閉。
    private BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1);
            switch (state) {
                case BluetoothAdapter.STATE_OFF:
                    showToast("STATE_OFF");
                    break;
                case BluetoothAdapter.STATE_ON:
                    showToast("STATE_ON");
                    break;
                case BluetoothAdapter.STATE_TURNING_ON:
                    showToast("STATE_TURNING_ON");
                    break;
                case BluetoothAdapter.STATE_TURNING_OFF:
                    showToast("STATE_TURNING_OFF");
                    break;
                default:
                    showToast("Unkown STATE");
                    break;
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //意圖過濾器
        IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
        //receiver監(jiān)聽filter廣播
        registerReceiver(receiver, filter);
    }
    @Override
    protected void onDestroy() {
        //注銷廣播
        unregisterReceiver(receiver);
        super.onDestroy();
    }
    //是否支持藍牙
    public void isSupportBlueTooth(View view) {
        boolean ret = mController.isSupportBlueTooth();
        showToast("support Bluetooth? " + ret);
    }
    //藍牙是否能用(打開還是關(guān)閉)
    public void isBlueToothEnable(View view) {
        boolean ret = mController.getBlueToothStatus();
        showToast("Bluetooth enable绿淋?" + ret);
    }
    //打開藍牙
    public void requestTurnOnBlueTooth(View view) {
        mController.turnOnBlueTooth(this, REQUEST_CODE);
    }
    //關(guān)閉藍牙
    public void turnOffBlueTooth(View view) {
        mController.turnOffBlueTooth();
    }

    private void showToast(String text) {
        if( mToast == null) {
            mToast = Toast.makeText(this, text, Toast.LENGTH_SHORT);
        }
        else {
            mToast.setText(text);
        }
        mToast.show();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //當發(fā)起請求藍牙打開事件時闷畸,會告訴你用戶選擇的結(jié)果
        if( resultCode == RESULT_OK) {
            showToast("打開成功");
        }
        else {
            showToast("打開失敗");
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吞滞,隨后出現(xiàn)的幾起案子佑菩,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倘待,死亡現(xiàn)場離奇詭異疮跑,居然都是意外死亡,警方通過查閱死者的電腦和手機凸舵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門祖娘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人啊奄,你說我怎么就攤上這事渐苏。” “怎么了菇夸?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵琼富,是天一觀的道長。 經(jīng)常有香客問我庄新,道長鞠眉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任择诈,我火速辦了婚禮械蹋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘羞芍。我一直安慰自己哗戈,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布荷科。 她就那樣靜靜地躺著唯咬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畏浆。 梳的紋絲不亂的頭發(fā)上胆胰,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音刻获,去河邊找鬼蜀涨。 笑死,一個胖子當著我的面吹牛将鸵,可吹牛的內(nèi)容都是我干的勉盅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼顶掉,長吁一口氣:“原來是場噩夢啊……” “哼草娜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起痒筒,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤宰闰,失蹤者是張志新(化名)和其女友劉穎茬贵,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體移袍,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡解藻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了葡盗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片螟左。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖觅够,靈堂內(nèi)的尸體忽然破棺而出胶背,到底是詐尸還是另有隱情,我是刑警寧澤喘先,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布钳吟,位于F島的核電站,受9級特大地震影響窘拯,放射性物質(zhì)發(fā)生泄漏红且。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一涤姊、第九天 我趴在偏房一處隱蔽的房頂上張望暇番。 院中可真熱鬧,春花似錦砂轻、人聲如沸奔誓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至和措,卻和暖如春庄呈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背派阱。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工诬留, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贫母。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓文兑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親腺劣。 傳聞我的和親對象是個殘疾皇子绿贞,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,108評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)橘原,斷路器籍铁,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫涡上、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,102評論 4 62
  • 是時候該展示一下自己的實力了拒名。 我從小成績就很好吩愧,不是學習特刻苦的那種,是那種玩著都能考第一的那種(請充分感受一下...
    原來我是小書童閱讀 1,299評論 21 17
  • 一只蜘蛛增显,穿著彩色長襪抽出一張芯片卡威脅我交出你的年齡交出你的性別交出你的愛好交出你的照片 我大聲抗拒但我的年齡雁佳、...
    阿水閱讀 399評論 1 9