Android蓝牙代码整理笔记

(一)BluetoothAdapter类

BluetoothAdapter类简单点来说就是代表了本设备(手机、电脑等)的蓝牙适配器对象,通过它我们可以对蓝牙设备进行基本的开发,主要有如下功能:

1、开关蓝牙设备

2、扫描蓝牙设备

3、设置/获取蓝牙状态信息,例如:蓝牙状态值、蓝牙Name、蓝牙Mac地址等;

与BluetoothAdapter连用的知识

1、BluetoothAdapter STATE 状态值 , 即开关状态

int STATE_OFF 蓝牙已经关闭

int STATE_ON 蓝牙已经打开

int STATE_TURNING_OFF 蓝牙处于关闭过程中 ,关闭ing 

int STATE_TURNING_ON 蓝牙处于打开过程中 ,打开ing

  2、BluetoothAdapter  SCAN_MOD状态值 ,即扫描状态

            首先说明,可以扫描其他设备的,当然它同时能被其他蓝牙设备扫码。

         int  SCAN_MODE_CONNECTABLE    表明该蓝牙可以扫描其他蓝牙设备

         int  SCAN_MODE_CONNECTABLE_DISCOVERABLE    表明该蓝牙设备同时可以扫码其他蓝牙设备,并且可以被其他蓝牙设备扫描到。

         int  SCAN_MODE_NONE : 该蓝牙不能扫描以及被扫描。

    3、获得蓝牙适配器实例

       public static synchronized BluetoothAdapter getDefaultAdapter ()

           功能:获得本设备的蓝牙适配器实例。

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

    4、打开/关闭蓝牙的两种方法:

         4.1、打开蓝牙:

            ①直接调用函数enable()去打开蓝牙设备 ;

            ②系统API去打开蓝牙设备,该方式会弹出一个对话框样式的Activity供用户选择是否打开蓝牙设备。

               注意:如果蓝牙已经开启,不会弹出该Activity界面。

   代码示例分别如下:

//第一种打开方法: 调用enable 即可  
boolean result = mBluetoothAdapter.enable();  
  
//  
/第二种打开方法 ,调用系统API去打开蓝牙  
if (!mBluetoothAdapter.isEnabled()) //未打开蓝牙,才需要打开蓝牙  
{  
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);  
startActivityForResult(intent, REQUEST_OPEN_BT_CODE);  
//会以Dialog样式显示一个Activity , 我们可以在onActivityResult()方法去处理返回值  
}  

        4.2、关闭蓝牙

           直接调用API 函数即disable()即可。

             public  boolean disable ()

               功能:关闭蓝牙设备。

               返回值:该函数会立即返回。

                            true    表示关闭操作成功

                           false   表示蓝牙操作失败 , ①、当前蓝牙已经关闭 ;  ②、其他一些异常情况

   5、扫描蓝牙设备

      public boolean startDiscovery () 

          功能: 扫描蓝牙设备

          注意: 如果蓝牙没有开启,该方法会返回false ,即不会开始扫描过程。

      public  boolean cancelDiscovery ()

         功能: 取消扫描过程。

         注意: 如果蓝牙没有开启,该方法会返回false。

     public boolean isDiscovering ()

        功能: 是否正在处于扫描过程中。

        注意: 如果蓝牙没有开启,该方法会返回false。

   6、 获取蓝牙相关信息

    public String getName ()

       功能:获取蓝牙设备Name

    public String getAddress ()

       功能:获取蓝牙设备的硬件地址(MAC地址),例如:00:11:22:AA:BB:CC  

   public boolean setName (String name)

     功能:设置蓝牙设备的Name,

   public Set<BluetoothDevice> getBondedDevices ()

     功能:获取与本机蓝牙所有绑定的远程蓝牙信息,以BluetoothDevice类实例(稍后讲到)返回。

     注意:如果蓝牙为开启,该函数会返回一个空集合 。

  public static boolean checkBluetoothAddress (String address)

     功能: 验证蓝牙设备MAC地址是否有效。所有设备地址的英文字母必须大写,48位,形如:00:43:A8:23:10:F1 。

     返回值: true 设备地址有效

                   false 设备地址无效

 public BluetoothDevice getRemoteDevice (String address)

      功能:以给定的MAC地址去创建一个 BluetoothDevice 类实例(代表远程蓝牙实例)。即使该蓝牙地址不可见,也会产生

          一个BluetoothDevice 类实例。

      返回:BluetoothDevice 类实例 。注意,如果该蓝牙设备MAC地址不能被识别,其蓝牙Name为null。

          异常:如果MAC  address无效,抛出IllegalArgumentException。

 7、蓝牙相关广播

             Action值                                                说明

      ACTION_STATE_CHANGED                    蓝牙状态值发生改变

      ACTION_SCAN_MODE_CHANGED         蓝牙扫描状态(SCAN_MODE)发生改变

      ACTION_DISCOVERY_STARTED             蓝牙扫描过程开始

      ACTION_DISCOVERY_FINISHED             蓝牙扫描过程结束

      ACTION_LOCAL_NAME_CHANGED        蓝牙设备Name发生改变

      ACTION_REQUEST_DISCOVERABLE       请求用户选择是否使该蓝牙能被扫描

                PS:如果蓝牙没有开启,用户点击确定后,会首先开启蓝牙,继而设置蓝牙能被扫描。

      ACTION_REQUEST_ENABLE                  请求用户选择是否打开蓝牙

      ACTION_FOUND  (该常量字段位于BluetoothDevice类中,稍后讲到)

                说明:蓝牙扫描时,扫描到任一远程蓝牙设备时,会发送此广播。

         通过注册这个广播,我们可以获取扫描到的蓝牙信息。方法如下:

//扫描到了任一蓝牙设备  
if(BluetoothDevice.ACTION_FOUND.equals(intent.getAction()))  
{  
   Log.v(TAG, "### BT BluetoothDevice.ACTION_FOUND ##");  
                  
   BluetoothDevice btDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);  
                  
   if(btDevice != null){  
        Log.v(TAG , "Name : " + btDevice.getName() + " Address: " + btDevice.getAddress());  
                      
   }  
   else if(BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(intent.getAction()))  
   {  
        Log.v(TAG, "### BT ACTION_BOND_STATE_CHANGED ##");  
                  
        int cur_bond_state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_NONE);  
        int previous_bond_state = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, BluetoothDevice.BOND_NONE);  
                  
                  
        Log.v(TAG, "### cur_bond_state ##" + cur_bond_state + " ~~ previous_bond_state" + previous_bond_state);  
    }  
}  

(二)

Android之四大组件、六大布局、五大存储_shenggaofei的博客-CSDN博客_android的四大组件

android view的setVisibility方法值
有3个:
1.View.VISIBLE,常量值为0,意思是可见的
2.View.INVISIBLE,常量值是4,意思是不可见的
3.View.GONE,常量值是8,意思是不可见的,并且不占用布局空间

AndroidManifest.xml中权限的添加

android.permission.BLUETOOTH : 允许程序连接到已配对的蓝牙设备, 请求连接/接收连接/传输数据需要改权限, 主要用于对配对后进行操作;

android.permission.BLUETOOTH_ADMIN : 允许程序发现和配对蓝牙设备, 该权限用来管理蓝牙设备, 有了这个权限, 应用才能使用本机的蓝牙设备, 主要用于对配对前的操作;

优先级 : BLUETOOTH权限是BLUETOOTH_ADMIN权限的前提, 如果没有BLUETOOTH权限, 就不能使用BLUETOOTH_ADMIN权限;

这个是发送端注册上的
IntentFilter filter = new IntentFilter(
				Intent.ACTION_MEDIA_SCANNER_STARTED);
		filter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
这个是接受端的
String action=intent.getAction();
		if (Intent.ACTION_MEDIA_SCANNER_STARTED.equals(action)){
}
解释:
首先要明白,系统预定义的动作,也就是action都是静态的字符串类型常量,相当于一个人的名字一样,虽然叫动作,
并不代表一定会做什么事,只是可以通过这些名字去开启一些和这些动作相关的activity。
if的意识是说如果接收到的action,恰好与某一个预定义的字符串常量相等,系统就会明白发送端注册了Intent.ACTION_MEDIA_SCANNER_STARTED
这个Action,然后就在发送端和接收端建立了联系,action的一个重要作用,就是标示特定的activity,
系统预定义的activity就是标识系统预装的一些小程序或界面,比如打电话的界面,网页浏览器,还有像你上面的媒体扫描器等。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值