搜索附近的蓝牙设备,并将其名字和mac地址现在在textview中

上一篇文章已经写了如何打开蓝牙设备,显示已经配对成功的蓝牙设备,http://blog.csdn.net/liuzuyi200/article/details/37740401

这篇文章主要写如何搜索蓝牙设备

(2)搜索蓝牙设备需要执行startDiscovery()这个方法,这个过程会大约持续12秒。

if (mBluetoothAdapter.isDiscovering()) {
				            mBluetoothAdapter.cancelDiscovery();
				        }
				        // 开始搜索蓝牙设备,搜索到的蓝牙设备通过广播返回
				        mBluetoothAdapter.startDiscovery();  

要执行这个方法必须注册一个BroadcastReceiver,属性BluetoothDevice.ACTION_FOUND的intent

private final BroadcastReceiver Receiver = new BroadcastReceiver(){

     	public void onReceive(Context context, Intent intent) {
     		String action = intent.getAction();
     		if(BluetoothDevice.ACTION_FOUND.equals(action))
     		{
     			BluetoothDevice device =intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
     			 if (device.getBondState() != BluetoothDevice.BOND_BONDED) {  

     				textview1.append(device.getName() + ":"
                            + device.getAddress() + "\n\n");
                 }  

     		}
		}
	};

注册BroadcastReceiver用下面这句话完成,分别在调用开始和结束时使用

IntentFilter Filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
	        registerReceiver( Receiver , Filter); 

	     Filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
	        registerReceiver( Receiver , Filter);  

如果调用结束,还需要取消注册

protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        //解除注册
        unregisterReceiver(Receiver);
    } 

下面是打开蓝牙设备 显示已经配对的蓝牙设备 ,搜索附近的蓝牙设备,并将已配对的蓝牙设备显示在textview中的布局文件和源码

activity_main.xml

<ScrollView 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">
<LinearLayout 

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <TextView
        android:id="@+id/Textview1"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

</LinearLayout>
</ScrollView>

MainActivity

package com.liuzuyi.bluetooth;

import java.util.Set;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	private static final int REQUEST_ENABLE_BT = 1;

	private Button button;
	private TextView textview1;

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

		button=(Button)findViewById(R.id.button1);
        textview1=(TextView )findViewById(R.id.Textview1);
		button.setOnClickListener( new blue());
		 IntentFilter Filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
	        registerReceiver( Receiver , Filter); 

	      Filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
	        registerReceiver( Receiver , Filter);  

	}
	private final BroadcastReceiver Receiver = new BroadcastReceiver(){

     	public void onReceive(Context context, Intent intent) {
     		String action = intent.getAction();
     		if(BluetoothDevice.ACTION_FOUND.equals(action))
     		{
     			BluetoothDevice device =intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
     			 if (device.getBondState() != BluetoothDevice.BOND_BONDED) {  

     				textview1.append(device.getName() + ":"
                            + device.getAddress() + "\n\n");
                 }  

     		}
		}
	};
	protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        //解除注册
        unregisterReceiver(Receiver);
    }
	class blue implements OnClickListener{

		@Override
		public void onClick(View v) {

			  BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
				if (mBluetoothAdapter == null)
				{
				   Toast.makeText(MainActivity.this, "此设备不支持蓝牙传输功能!", Toast.LENGTH_SHORT).show();
				}
				else{
					Toast.makeText(MainActivity.this, "此设备支持蓝牙传输功能!", Toast.LENGTH_SHORT).show();
					if (!mBluetoothAdapter.isEnabled())
					{
						  Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
						  enableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
				            startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
				           Toast.makeText(MainActivity.this, "蓝牙设备已经打开!", Toast.LENGTH_SHORT).show(); 

			        }
					 if (mBluetoothAdapter.isDiscovering()) {
				            mBluetoothAdapter.cancelDiscovery();
				        }
				        // 开始搜索蓝牙设备,搜索到的蓝牙设备通过广播返回
				        mBluetoothAdapter.startDiscovery();  

					Set<BluetoothDevice> pairedDevices=mBluetoothAdapter.getBondedDevices();
					if(pairedDevices.size() > 0){
						for (BluetoothDevice bluetoothDevice : pairedDevices) {
							textview1.append(bluetoothDevice.getName() + ":"
				                        + bluetoothDevice.getAddress() + "\n\n");
						}
					}
				  }
		      }
	}
}

说明:点击按钮,就会把未配对过的蓝牙设备的名字和mac地址显示在textview中,如果想显示所有的蓝牙设备就把onReceive方法中的if语句去掉。

搜索附近的蓝牙设备,并将其名字和mac地址现在在textview中,布布扣,bubuko.com

时间: 2024-10-13 17:02:22

搜索附近的蓝牙设备,并将其名字和mac地址现在在textview中的相关文章

通过安卓应用获取任意蓝牙设备的MAC地址

最近做一个安卓应用,用蓝牙信号控制一台仪器,通过一个蓝牙转串口的装置,发送蓝牙信号,然后转换为串口命令发送给仪器.蓝牙装置如下: 在写安卓应用中的java代码时,如何获取这个蓝牙设备呢?BluetoothAdapter 的 getRemoteDevice(address) 方法可以通过MAC地址来获取蓝牙设备: BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); 但问题来了,这个蓝牙设备的MAC地址是多少呢?

android 打开蓝牙设备 显示已经配对的蓝牙设备 ,并将已配对的蓝牙设备显示在textview中

(1)要想使用android 手机的Bluetooth,需要在androidmanifest文件中加入使用蓝牙的权限. <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 注意:权限应该添加在androidmanifest文件中&

iOS学习笔记之蓝牙(有关蓝牙设备mac地址处理) 2

1.创建中心设备,并设置代理 一般情况下,手机是中心设备,蓝牙设备是外围设备. self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; 1.创建之后,会进入到改变蓝牙状态的代理方法中. (void)centralManagerDidUpdateState:(CBCentralManager *)central; ``` 在这个方法中,可以判断蓝牙的状态,进行相应的操作. CBCentral

apue和unp的学习之旅11——名字与数值地址转换

//-------------------------------------1.为什么使用名字好----------------------------------------- 我们应该使用名字而不是数值来标识主机(例如数值206.6.226.33),服务器(例如端口13代表标准的daytime服务器),然而出于以下几个理由,我们应该使用名字而不是数值: 1).名字好记住 2).数值地址可以变动而名字保持不变 3).随着往IPv6上转移,数值地址变得相当长,手工键入地址很容易出错. //--

DOS命令-通过IP查找MAC地址以及计算机名字

通过IP查MAC地址以及计算机名字. C:\Users>nbtstat -r -n -A 192.168.0.0 结果如下: NetBIOS 远程计算机名称表 名称 类型 状态 --------------------------------------------- AAAA-HS01 <00> 唯一 已注册 AAAAA         <00> 组 已注册 AAAA-HS01 <20> 唯一 已注册 AAAAA          <1E> 组 已注

stream_get_meta_data(打开的文件句柄) 拿到任何网站服务器名字,从封装协议文件指针中取得报头/元数据

$url = "http://www.sina.com/"; function parse($url) { if(!($fp = @fopen($url, 'rb')) ){ exit('路径错误'); } $meta = stream_get_meta_data($fp); foreach(array_keys($meta) as $h){ $v = $meta[$h]; echo "".$h.": ".$v."<br/>

android Bluetooth程序设计

Bluetooth一个简短的引论 蓝牙,是一种短距离通信配套设备(一般10m中)无线技术. 包含移动电话.PDA.无线耳机.笔记本电脑.相关外设等众多设备之间进行无线信息交换.利用"蓝牙"技术,可以有效地简化移动通信终端设备之间的通信,也可以成功地简化设备与因特网Internet之间的通信.从而传输数据变得更加迅速高效,为无线通信拓宽道路.蓝牙採用分散式网络结构以及快跳频和短包技术,支持点对点及点对多点通信.工作在全球通用的2.4GHz ISM(即工业.科学.医学)频段. 其数据速率为

[安卓] 13、安卓蓝牙定位(一)——如何周期性获得蓝牙节点信号强度?

前言 本文将用一个简单的例子介绍如何用安卓手机的蓝牙功能来周期性搜索周边蓝牙节点的信号强度,为有意玩一下蓝牙室内定位的爱好者提供一点小的思路.(如果是想用安卓手机和蓝牙模块通信来实现遥控功能的话,可以参考:http://www.cnblogs.com/zjutlitao/p/4231635.html:想用笔记本和蓝牙模块通信来实现遥控功能的话可以参考:http://www.cnblogs.com/zjutlitao/p/3886826.html:如果是想使用笔记本的蓝牙来做蓝牙定位的话,哈哈,建

Android 蓝牙串口服务客户端开发 尝试

如题,经过三四天的开发尝试已经初步成型,下面是简陋的界面图: 上图是做的蓝牙串口服务的收发界面,主要用于平时的调试之用,由于开发的初衷是为了实现蓝牙对单片机的控制,因此加入了<进入控制/>的按钮选项,下图是控制界(xian)面(tiao) 没办法,没有太多的美学细胞,拖了两个重写的seekbar就作为控制摇杆了... 初次写Android,初次触及Java,水平自然就是无言以对,哈哈,不过为了防止万一以后有需求的升级,博客还是要写的. 1.环境搭建 Android开发者官网上提供了两套集成开发