蓝牙原理Android代码实现

本文实例为大家分享了Android实现蓝牙原理代码,供大家参考,具体内容如下

package com.example.se7en.testbluetooth;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class MainActivity extends Activity
{

  private BluetoothAdapter adapter;

  private MyReceiver receiver;

  private ListView mListView;

  private List<BluetoothDevice> mDevices;

  private com.example.se7en.testbluetooth.DeviceAdapter mDeviceAdapter;

  private BluetoothSocket mSocket;

  private EditText et;

  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mListView = (ListView) findViewById(R.id.lv);
    et = (EditText) findViewById(R.id.et);
    adapter = BluetoothAdapter.getDefaultAdapter();
    BlueToothHandler.getInstance().setContext(this);
    init();
  }

  private void init()
  {
    initListView();
    // 判断是否支持蓝牙功能
    if (adapter == null)
    {
      Toast.makeText(this, "该手机不支持蓝牙功能", Toast.LENGTH_LONG).show();
      return;
    }
    // 判断蓝牙功能是否打开
    if (!adapter.isEnabled())
    {
      // 强行打开
//      adapter.enable();
      Intent intent=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
      startActivity(intent);
    }

    IntentFilter filter = new IntentFilter();
    // 注册扫描开始的广播
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
    // 注册扫描结束的广播
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    // 注册扫描已经找到设备的广播
    filter.addAction(BluetoothDevice.ACTION_FOUND);
    receiver = new MyReceiver();
    registerReceiver(receiver, filter);
    startBlueServer();
  }

  /**
   * 启动蓝牙服务
   */
  private void startBlueServer()
  {
    new Thread()
    {
      @Override
      public void run()
      {
        while (true)
        {
          try
          {
            BluetoothServerSocket serverSocket = adapter
                .listenUsingRfcommWithServiceRecord(
                    "蓝牙服务",
                    UUID.fromString("997f1b20-b4a0-45ea-a7dd-b2097299b1f6"));
            mSocket = serverSocket.accept();//阻塞
            BlueToothHandler.getInstance().setSocket(mSocket);
          }
          catch (IOException e)
          {
            e.printStackTrace();
          }
        }
      }
    }.start();
  }

  public void doClick(View view)
  {
    switch (view.getId())
    {
      case R.id.btn:
        mDevices.clear();
        mDeviceAdapter.notifyDataSetChanged();
        // 判断是否正在扫描,如果没在扫描那么就开始扫描
        if (!adapter.isDiscovering() && adapter.startDiscovery())
        {
          Toast.makeText(this, "开始扫描周围的蓝牙设备", Toast.LENGTH_LONG)
              .show();
        }
        break;
      case R.id.send:
        if ("".equals(et.getText().toString()))
        {
          Toast.makeText(this, "内容不能为空", Toast.LENGTH_SHORT).show();
          return;
        }
        if (BlueToothHandler.getInstance().getSocket() == null)
        {
          Toast.makeText(this, "还未连接设备", Toast.LENGTH_SHORT).show();
          return;
        }
        new Thread()
        {
          @Override
          public void run()
          {
            BlueToothHandler.getInstance().sendMessage(
                et.getText().toString());
          }
        }.start();
        break;
      case R.id.dis:
        BlueToothHandler.getInstance().closeSocket();
        break;
    }
  }

  @Override
  protected void onDestroy()
  {
    super.onDestroy();
    if (receiver != null)
    {
      // 注销广播
      unregisterReceiver(receiver);
    }
  }

  private void initListView()
  {
    mDevices = new ArrayList<BluetoothDevice>();
    mDeviceAdapter = new com.example.se7en.testbluetooth.DeviceAdapter(this, mDevices);
    mListView.setAdapter(mDeviceAdapter);
    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
      @Override
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id)
      {
        try
        {
          mSocket = mDevices
              .get(position)
              .createRfcommSocketToServiceRecord(
                  UUID.fromString("997f1b20-b4a0-45ea-a7dd-b2097299b1f6"));
          mSocket.connect();//阻塞
          Toast.makeText(MainActivity.this, "连接成功",
              Toast.LENGTH_SHORT).show();
          BlueToothHandler.getInstance().setSocket(mSocket);
        }
        catch (IOException e)
        {
          e.printStackTrace();
        }

      }
    });
  }

  public class MyReceiver extends BroadcastReceiver
  {

    @Override
    public void onReceive(Context context, Intent intent)
    {
      String action = intent.getAction();
      if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_STARTED))
      {
        Log.i("info", "开始扫描");
      }
      else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED))
      {
        Log.i("info", "扫描结束");
      }
      else if (action.equals(BluetoothDevice.ACTION_FOUND))
      {
        BluetoothDevice device = intent
            .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        Log.i("info", device.getName() + ":" + device.getAddress());
        if (mDevices != null)
        {
          for (int i = 0; i < mDevices.size(); i++)
          {
            if (device.getAddress()
                .equals(mDevices.get(i).getAddress()))
            {
              return;
            }
          }
          mDevices.add(device);
          mDeviceAdapter.notifyDataSetChanged();
        }
      }
    }

  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android 蓝牙2.0的使用方法详解

    本文为大家分享了Android操作蓝牙2.0的使用方法,供大家参考,具体内容如下 1.Android操作蓝牙2.0的使用流程 (1)找到设备uuid (2)获取蓝牙适配器,使得蓝牙处于可发现模式,获取下位机的socket,并且与上位机建立建立连接,获取获取输入流和输出流,两个流都不为空时,表示连接成功.否则是连接失败. (3).与下位机的socket开始通信. (4).通信结束后,断开连接(关闭流,关闭socket) 2接下来接直接上代码: 2.1找到设备uuid(一般厂商都会给开发者提供) 复

  • Android编程之蓝牙测试实例

    本文实例讲述了Android编程之蓝牙测试.分享给大家供大家参考.具体分析如下: 一.软件平台: win7 + eclipse + sdk 二.设计思路: 配合倒计时定时器实现蓝牙打开,可见,扫描三个功能 三.源代码: main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/re

  • Android Bluetooth蓝牙技术使用流程详解

    在上篇文章给大家介绍了Android Bluetooth蓝牙技术初体验相关内容,感兴趣的朋友可以点击了解详情. 一:蓝牙设备之间的通信主要包括了四个步骤 设置蓝牙设备 寻找局域网内可能或者匹配的设备 连接设备 设备之间的数据传输 二:具体编程实现 1. 启动蓝牙功能 首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter,如果返回为空,则无法继续执行了.例如: BluetoothAdapter mBluetoothAdapter = Blueto

  • 分享Android 蓝牙4.0(ble)开发的解决方案

    最近,随着智能穿戴式设备.智能医疗以及智能家居的普及,蓝牙开发在移动开中显得非常的重要.由于公司需要,研究了一下,蓝牙4.0在Android中的应用. 以下是我的一些总结. 1.先介绍一下关于蓝牙4.0中的一些名词吧:    (1).GATT(Gneric Attibute  Profile) 通过ble连接,读写属性类小数据Profile通用的规范.现在所有的ble应用Profile  都是基于GATT (2).ATT(Attribute Protocal) GATT是基于ATT Potoca

  • Android蓝牙通信编程

    项目涉及蓝牙通信,所以就简单的学了学,下面是自己参考了一些资料后的总结,希望对大家有帮助.  以下是开发中的几个关键步骤: 1.首先开启蓝牙  2.搜索可用设备  3.创建蓝牙socket,获取输入输出流  4.读取和写入数据 5.断开连接关闭蓝牙 下面是一个蓝牙聊天demo  效果图: 在使用蓝牙是 BluetoothAdapter 对蓝牙开启,关闭,获取设备列表,发现设备,搜索等核心功能 下面对它进行封装: package com.xiaoyu.bluetooth; import java.

  • Android设备间实现蓝牙(Bluetooth)共享上网

    Android设备之间可以除了通过wifi热点共享上网,还可以通过蓝牙共享上网,后面这个功能很少人使用,但适合某台设备没有wifi却有蓝牙的情况. 一.设置WT19i,系统设置>无线连接>网络共享>开启蓝牙共享网络(这步很多人忽略,导致无法上网) 二.开启N7 二代蓝牙并配对,返回WT19i,已配对设备>配置>开启互联网连接共享 三.设置N7 二代,已配对设备>配置>开启互联网访问(第二步主机共享没开启的话这里也无法开启) 测试效果良好,访问网络正常,Androi

  • Android蓝牙开发深入解析

    1. 使用蓝牙的响应权限 复制代码 代码如下: <uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 2. 配置本机蓝牙模块 在这里首先要了解对蓝牙操作一个核心类BluetoothAdapter 复制代码 代码如下: Bluetoot

  • android实现蓝牙文件发送的实例代码,支持多种机型

    最近项目上需要实现蓝牙传输apk的一个功能,能够搜索周围的蓝牙手机并分享文件.从需求上讲android手机自带的蓝牙传输模块就可以满足需要了,实现也很简单.不过让人头疼的是,虽然说一般的主流机型都配置有蓝牙模块,但是android机型碎片化太严重,不同android版本手机蓝牙功能也不一样.4.0.3以下版本和以上版本使用的蓝牙包是不同的,分别是"com.android.bluetooth"和"com.mediatek.bluetooth".还有一些厂商对蓝牙模块进

  • android接收到蓝牙配对请求时如何点亮屏幕具体实现

    file: BluetoothEventLoop.java GB/GB2/GB3: 1. import android.os.PowerManager; 2. 变量申明:private PowerManager.WakeLock mWakeLock; 3. BluetoothEventLoop(){} 构造函数里面添加定义: PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); mWake

  • Android蓝牙通信聊天实现发送和接受功能

    很不错的蓝牙通信demo实现发送和接受功能,就用了两个类就实现了,具体内容如下 说下思路把 主要有两个类 主界面类 和 蓝牙聊天服务类 . 首先创建线程 实际上就是创建BluetoothChatService() (蓝牙聊天服务类) 这个时候把handler 传过去 这样就可以操作UI 界面了,在线程中不断轮询读取蓝牙消息,当主界面点击发送按钮时 调用BluetoothChatService 的发送方法write 方法,这里的write 方法 使用了handler 发送消息,在主界面显示,另一个

随机推荐