美文网首页
蓝牙开发基础设置

蓝牙开发基础设置

作者: 学android的小新 | 来源:发表于2016-06-11 17:59 被阅读921次
    1.需要的权限
     <uses-permission android:name="android.permission.BLUETOOTH" />
        <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    

    第一个权限是简单的打开蓝牙;第二个权限是搜索蓝牙、匹配蓝牙、蓝牙与蓝牙之间传递数据需要的权限

    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="蓝牙的状态"
               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="关闭蓝牙"
               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;
            }
        }
        /**
         * 判断当前蓝牙状态
         * @return true 打开,false 关闭
         */
        public boolean getBlueToothStatus() {
            //assert断言:只有为true才会执行下去
            assert (mAdapter != null);
            return mAdapter.isEnabled();
        }
        /**
         * 打开蓝牙
         * @param activity
         * @param requestCode
         */
    //    我们一般打开蓝牙会使用到系统提供的一个Activity。这个Activity的action为:
    //      BluetoothAdapter.ACTION_REQUEST_ENABLE。
    //    然后我们要使用startActivityForResult()这个方法来启动它。
    //    这个Activity是有返回值的,如果用户选择的是打开,我们应该可以收到一个RESULT_OK
    //    如果用户选择的是取消,我们应该可以收到一个RESULT_CANCELED。
        public void turnOnBlueTooth(Activity activity, int requestCode) {
            Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            activity.startActivityForResult(intent, requestCode);
    //        mAdapter.enable();
        }
    
        /**
         * 关闭蓝牙
         */
        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;
    
        /**
         * 监听蓝牙开关的广播 监听蓝牙状态的改变
         */
    //    当蓝牙的状态发生改变时,系统是会发出一个为BluetoothAdapter.ACTION_STATE_CHANGED的广播。
    //    该广播携带两个参数,一个是BluetoothAdapter.EXTRA_PREVIOUS_STATE,表示之前的蓝牙状态。
    //    另一个是BluetoothAdapter.EXTRA_STATE,表示当前的蓝牙状态。而它们的值为以下四个:
    //    BluetoothAdapter.STATE_TURNING_ON;
    //    BluetoothAdapter.STATE_ON;
    //    BluetoothAdapter.STATE_TURNING_OFF;
    //    BluetoothAdapter.STATE_OFF;
    //    分别代表,打开中,已打开,关闭中,已关闭。
        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监听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);
        }
        //蓝牙是否能用(打开还是关闭)
        public void isBlueToothEnable(View view) {
            boolean ret = mController.getBlueToothStatus();
            showToast("Bluetooth enable?" + ret);
        }
        //打开蓝牙
        public void requestTurnOnBlueTooth(View view) {
            mController.turnOnBlueTooth(this, REQUEST_CODE);
        }
        //关闭蓝牙
        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);
            //当发起请求蓝牙打开事件时,会告诉你用户选择的结果
            if( resultCode == RESULT_OK) {
                showToast("打开成功");
            }
            else {
                showToast("打开失败");
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:蓝牙开发基础设置

          本文链接:https://www.haomeiwen.com/subject/yoqedttx.html