您的位置:首页 > 移动开发 > Android开发

Android 蓝牙

2016-05-04 09:21 387 查看
代码步骤
    1:需要在AndroidMainfest.xml里声明蓝牙权限

<uses-permission android:name="android.permission.BLUETOOTH" />
蓝牙管理权限:
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

    2:获得BluetoothAdapter对象
    3:判断当前设备中是否拥有蓝牙设备
    4:判断当前设备中的蓝牙设备是否已经打开
    5:得到所有已经配对的蓝牙设备对象

代码:

//得到BluetoothAdapter对象
      BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
      //判断BluetoothAdapter对象是否为空,如果为空,则表明本机没有蓝牙设备
      if(adapter != null)
      {
        System.out.println("本机拥有蓝牙设备");
        //调用isEnabled()方法判断当前蓝牙设备是否可用
        if(!adapter.isEnabled())
        {
          //如果蓝牙设备不可用的话,创建一个intent对象,该对象用于启动一个Activity,提示用户启动蓝牙适配器
          Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
          startActivity(intent);
        }
        //得到所有已经配对的蓝牙适配器对象
        Set<BluetoothDevice> devices = adapter.getBondedDevices();
        if(devices.size()>0)
        {
          //用迭代
          for(Iterator iterator = devices.iterator();iterator.hasNext();)
          {
            //得到BluetoothDevice对象,也就是说得到配对的蓝牙适配器
            BluetoothDevice device = (BluetoothDevice)iterator.next();
            //得到远程蓝牙设备的地址
            Log.d("mytag",device.getAddress());

          }
      }
    }
    else
    {
      System.out.println("没有蓝牙设备");
    }

或者用这个套路:


package com.lyapp.bluetoothapp;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.Set;

import android.app.Activity;

import android.app.AlertDialog;

import android.bluetooth.BluetoothAdapter;

import android.bluetooth.BluetoothDevice;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.DialogInterface;

import android.content.Intent;

import android.content.IntentFilter;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.ListView;

public class MainActivity extends Activity implements OnItemClickListener {

private ListView lv;
private Button btn;

private BluetoothAdapter bluetoothAdapter = null;
private List<String> deviceList = new ArrayList<String>();
private ArrayAdapter<String> adapter;
private boolean hasRegister = false;
private DeviceReceiver receiver = new DeviceReceiver();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initView();
initBlueTooth();
}

@Override
protected void onStart() {
// TODO Auto-generated method stub
if (!hasRegister) {
hasRegister = true;
IntentFilter filterStart = new IntentFilter(
BluetoothDevice.ACTION_FOUND);
IntentFilter filterEnd = new IntentFilter(
BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(receiver, filterStart);
registerReceiver(receiver, filterEnd);
}
super.onStart();
}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
if (bluetoothAdapter != null && bluetoothAdapter.isDiscovering()) {
bluetoothAdapter.cancelDiscovery();
}
if (hasRegister) {
hasRegister = false;
unregisterReceiver(receiver);
}
super.onDestroy();
}

private void initBlueTooth() {
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

if (bluetoothAdapter != null) {
// 确认开启蓝牙
if (!bluetoothAdapter.isEnabled()) {
// 请求用户开启
Intent intent = new Intent(
BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent, RESULT_FIRST_USER);

// 使蓝牙设备可见,方便配对
Intent in = new Intent(
BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
in.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 200);// 可见持续200秒,不能超过200秒
startActivity(in);

// 直接开启,不经过提示


// bluetoothAdapter.enable();

}

} else {

// 设备不支持蓝牙

AlertDialog.Builder dialog = new AlertDialog.Builder(this);

dialog.setTitle(“No bluetooth devices”);

dialog.setMessage(“您的设备不支持蓝牙!”);

dialog.setNegativeButton("确认", null);
dialog.show();
}
}

private void initView() {
lv = (ListView) findViewById(R.id.lv);
btn = (Button) findViewById(R.id.btn);
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, deviceList);
lv.setAdapter(adapter);
lv.setOnItemClickListener(this);

btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// isDiscovering()--是否正在处于扫描过程中,如果蓝夜没有开启,该方法会返回false
if (bluetoothAdapter.isDiscovering()) {
bluetoothAdapter.cancelDiscovery();// 取消扫描过程
btn.setText("重新搜索");
} else {
bluetoothAdapter.startDiscovery();
findAvalibleDevice();
btn.setText("停止搜索");
}

}
});
}

/**
* 查找蓝牙设备
*/
private void findAvalibleDevice() {
// 获取可配对蓝牙设备
Set<BluetoothDevice> devices = bluetoothAdapter.getBondedDevices();

if (bluetoothAdapter != null && bluetoothAdapter.isDiscovering()) {
deviceList.clear();
adapter.notifyDataSetChanged();
}
if (devices.size() > 0) {// 存在已经配对过的蓝牙设备
for (Iterator<BluetoothDevice> it = devices.iterator(); it
.hasNext();) {
BluetoothDevice btd = it.next();
deviceList.add(btd.getName() + "\n" + btd.getAddress());
adapter.notifyDataSetChanged();
}
} else {
// 不存在已经匹配过的蓝牙设备
deviceList.add("没有已经匹配的蓝牙设备");
adapter.notifyDataSetChanged();
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
switch (resultCode) {
case RESULT_OK:
findAvalibleDevice();
break;
case RESULT_CANCELED:
break;
}

super.onActivityResult(requestCode, resultCode, data);
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
final String msg = deviceList.get(position);

if(bluetoothAdapter!=null&&bluetoothAdapter.isDiscovering()){
bluetoothAdapter.cancelDiscovery();
btn.setText("重新搜索");
}

//弹出框
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("是否连接设备");
builder.setMessage(msg);
builder.setPositiveButton("连接", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
BluetoothMsg.bluetoothAddress = msg.substring(msg.length()-17);

if(BluetoothMsg.lastBluetoothAddress!=BluetoothMsg.bluetoothAddress){
BluetoothMsg.lastBluetoothAddress = BluetoothMsg.bluetoothAddress;
}
Intent in = new Intent(MainActivity.this,BlueToothAddressActivity.class);
startActivity(in);
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
BluetoothMsg.bluetoothAddress = null;
}
});
builder.show();
}

/**
* 蓝牙搜索状态广播监听
*
* @author Administrator
*
*/
private class DeviceReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// 搜索到设备
BluetoothDevice device = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

// 搜索没有匹配到的设备
if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
deviceList.add(device.getName() + "\n"
+ device.getAddress());
adapter.notifyDataSetChanged();
}
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED
.equals(action)) {

if (lv.getCount() == 0) {
deviceList.add("没有可以连接的蓝牙设备");
adapter.notifyDataSetChanged();
}
btn.setText("重新搜索");
}
}

}


}

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: