检测周边蓝牙设备信号,并绘制半径不同的圆表示信号强弱

2024-03-13 18:32

本文主要是介绍检测周边蓝牙设备信号,并绘制半径不同的圆表示信号强弱,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

周边蓝牙强弱搜索/AndroidManifest.xml












    +<?xml version="1.0" encoding="utf-8"?>
    +<manifestxmlns:android="http://schemas.android.com/apk/res/android"
    +package="com.example.bt_dir"
    +android:versionCode="1"
    +android:versionName="1.0" >
    +
    + <uses-sdk
    +android:minSdkVersion="8"
    +android:targetSdkVersion="19" />
    +
    + <uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" />
    + <uses-permissionandroid:name="android.permission.BLUETOOTH" />
    +
    + <application
    +android:allowBackup="true"
    +android:icon="@drawable/ic_launcher"
    +android:label="@string/app_name"
    +android:theme="@style/AppTheme" >
    + <activity
    +android:name=".MainActivity"
    +android:label="@string/app_name" >
    + <intent-filter>
    + <actionandroid:name="android.intent.action.MAIN" />
    +
    + <categoryandroid:name="android.intent.category.LAUNCHER" />
    + </intent-filter>
    + </activity>
    + </application>
    +
    +</manifest>



周边蓝牙强弱搜索/res/layout/activity_main.xml
    +<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    +xmlns:tools="http://schemas.android.com/tools"
    +android:id="@+id/LinearLayout1"
    +android:layout_width="fill_parent"
    +android:layout_height="fill_parent"
    +android:orientation="vertical"
    +tools:context="com.example.bt_dir.MainActivity" >
    +
    + <SurfaceView
    +android:id="@+id/surface"
    + android:layout_width="fill_parent"
    + android:layout_height="fill_parent" />
    +</LinearLayout> 
周边蓝牙强弱搜索/res/menu/main.xml

周边蓝牙强弱搜索/res/menu/main.xml

Vie
   
周边蓝牙强弱搜索/res/layout/activity_main.xml



    +<menuxmlns:android="http://schemas.android.com/apk/res/android"
    +xmlns:app="http://schemas.android.com/apk/res-auto"
    +xmlns:tools="http://schemas.android.com/tools"
    +tools:context="com.example.bt_dir.MainActivity" >
    +
    + <item
    +android:id="@+id/action_settings"
    +android:orderInCategory="100"
    +android:title="@string/action_settings"
    +app:showAsAction="never"/>
    +
    +</menu>
    周边蓝牙强弱搜索/src/com/example/bt_dir/MainActivity.java+packagecom.example.bt_dir;
    +
    +importjava.util.Vector;
    +
    +importandroid.support.v7.app.ActionBarActivity;
    +importandroid.bluetooth.BluetoothAdapter;
    +importandroid.bluetooth.BluetoothDevice;
    +importandroid.content.BroadcastReceiver;
    +importandroid.content.Context;
    +importandroid.content.Intent;
    +importandroid.content.IntentFilter;
    +importandroid.graphics.Canvas;
    +importandroid.graphics.Color;
    +importandroid.graphics.Paint;
    +importandroid.graphics.Paint.Style;
    +importandroid.os.Bundle;
    +importandroid.os.Handler;
    +importandroid.os.Message;
    +importandroid.util.Log;
    +importandroid.view.Menu;
    +importandroid.view.MenuItem;
    +importandroid.view.SurfaceHolder;
    +importandroid.view.SurfaceHolder.Callback;
    +importandroid.view.SurfaceView;
    +
    +publicclass MainActivity extendsActionBarActivity implements Callback {
    +
    +private SurfaceView mSurface;
    +private SurfaceHolder mHolder;
    +private BluetoothAdapter mBtAdapter;
    +//private Message msg ;
    +//private Bundle bundle;
    +
    +private Vector<String> mDevicesVector;
    +private Vector<Short> mRSSIVector;
    +private Vector<Paint> mPaint;
    +//消息句柄(线程里无法进行界面更新,所以要把消息从线程里发送出来在消息句柄里进行处理)
    +public Handler myHandler =new Handler() {
    +@Override
    +public void handleMessage(Messagemsg)
    + {
    +Bundle bundle = msg.getData();
    +short now = bundle.getShort("msg");
    +Log.d("onGet",String.valueOf(now));
    +if (msg.what== 0x01)
    + {
    + draw();
    + }
    + doDiscovery();
    + }
    +//画图像
    +private void draw() {
    +Canvas canvas = mHolder.lockCanvas();
    + canvas.drawRGB(0,0, 0);
    +
    +for(int i=mRSSIVector.size()-1;i>=0;i--)
    + {
    + canvas.drawText(i+":"+mDevicesVector.get(i),5, i*10+12, mPaint.get(i));
    + canvas.drawCircle(canvas.getWidth()/2, canvas.getHeight()/2,150+mRSSIVector.get(i), mPaint.get(i)); //画圆圈
    + }
    + mHolder.unlockCanvasAndPost(canvas);// 更新屏幕显示内容
    + mRSSIVector.clear();
    + mDevicesVector.clear();
    + }
    + };
    +
    +@Override
    +protected void onCreate(BundlesavedInstanceState) {
    +super.onCreate(savedInstanceState);
    + setContentView(R.layout.activity_main);
    +
    +//msg = new Message();//消息
    +///bundle = new Bundle();
    +
    + mDevicesVector=newVector<String>();//向量
    + mRSSIVector=newVector<Short>();
    + mPaint=newVector<Paint>();
    +Paint paint0 = new Paint();
    + paint0.setAntiAlias(true);
    + paint0.setStyle(Style.STROKE);
    + paint0.setColor(Color.RED);
    + mPaint.add(paint0);
    +Paint paint1 = new Paint();
    + paint1.setAntiAlias(true);
    + paint1.setStyle(Style.STROKE);
    + paint1.setColor(Color.GREEN);
    + mPaint.add(paint1);
    +Paint paint2 = new Paint();
    + paint2.setAntiAlias(true);
    + paint2.setStyle(Style.STROKE);
    + paint2.setColor(Color.BLUE);
    + mPaint.add(paint2);
    +Paint paint3 = new Paint();
    + paint3.setAntiAlias(true);
    + paint3.setStyle(Style.STROKE);
    + paint3.setColor(Color.YELLOW);
    + mPaint.add(paint3);
    +Paint paint4 = new Paint();
    + paint4.setAntiAlias(true);
    + paint4.setStyle(Style.STROKE);
    + paint4.setColor(Color.WHITE);
    + mPaint.add(paint4);
    +Paint paint5 = new Paint();
    + paint5.setAntiAlias(true);
    + paint5.setStyle(Style.STROKE);
    + paint5.setColor(Color.LTGRAY);
    + mPaint.add(paint5);
    +Paint paint6 = new Paint();
    + paint6.setAntiAlias(true);
    + paint6.setStyle(Style.STROKE);
    + paint6.setColor(Color.CYAN);
    + mPaint.add(paint6);
    +
    + mSurface=(SurfaceView)findViewById(R.id.surface);
    + mHolder= mSurface.getHolder();
    + mHolder.addCallback(this);
    +
    +// Register for broadcasts when a device is discovered
    +IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    +this.registerReceiver(mReceiver, filter);
    +// Register for broadcasts when discovery has finished
    + filter= new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    +this.registerReceiver(mReceiver, filter);
    +
    +// Get the local Bluetooth adapter
    + mBtAdapter= BluetoothAdapter.getDefaultAdapter();
    + }
    +
    +// Start device discover with the BluetoothAdapter
    +private void doDiscovery() {
    +// Indicate scanning in the title
    + setProgressBarIndeterminateVisibility(true);
    +
    +// If we're already discovering, stop it
    +if (mBtAdapter.isDiscovering()) {
    + mBtAdapter.cancelDiscovery();
    + }
    +// Request discover from BluetoothAdapter
    + mBtAdapter.startDiscovery();
    + }
    +
    +// The BroadcastReceiver that listens for discovered devices and
    +// changes the title when discovery is finished
    +//【查找蓝牙设备】
    +private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    +@Override
    +public void onReceive(Contextcontext, Intent intent) {
    +Log.d("onReceive","OK");
    +String action = intent.getAction();
    +// When discovery finds a device
    +if (BluetoothDevice.ACTION_FOUND.equals(action)) {
    +// Get the BluetoothDevice object from the Intent
    +BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
    + mDevicesVector.add(device.getName()+ "\n"+ device.getAddress());
    +short rssi = intent.getExtras().getShort(BluetoothDevice.EXTRA_RSSI);
    + mRSSIVector.add(rssi);
    +Log.d("RSSI",device.getName()+""+String.valueOf(rssi));
    +// When discovery is finished, change the Activity title
    + }else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
    + setProgressBarIndeterminateVisibility(false);
    +if (mDevicesVector.size()!= 0) {
    +Message msg = new Message();//消息
    +Bundle bundle = new Bundle();
    + bundle.clear();Log.d("onReceive","1");
    + msg.what= 0x01;//消息类别
    + bundle.putShort("msg",(short)0);Log.d("onReceive","2");
    + msg.setData(bundle);Log.d("onReceive","3");
    + myHandler.sendMessage(msg);Log.d("onReceive","4");
    + }
    + }
    + }
    + };
    +
    +@Override
    +public boolean onCreateOptionsMenu(Menumenu) {
    +// Inflate the menu; this adds items to the action bar if it is present.
    + getMenuInflater().inflate(R.menu.main, menu);
    +return true;
    + }
    +
    +@Override
    +public boolean onOptionsItemSelected(MenuItemitem) {
    +// Handle action bar item clicks here. The action bar will
    +// automatically handle clicks on the Home/Up button, so long
    +// as you specify a parent activity in AndroidManifest.xml.
    +int id = item.getItemId();
    +if (id == R.id.action_settings) {
    + doDiscovery();
    +return true;
    + }
    +return false;
    + }
    +
    +@Override
    +public void surfaceCreated(SurfaceHolderholder) {
    +// TODO Auto-generated method stub
    +
    + }
    +
    +@Override
    +public void surfaceChanged(SurfaceHolderholder, int format, int width,
    +int height) {
    +// TODO Auto-generated method stub
    +
    + }
    +
    +@Override
    +public void surfaceDestroyed(SurfaceHolderholder) {
    +// TODO Auto-generated method stub
    +
    + }
    +}

这篇关于检测周边蓝牙设备信号,并绘制半径不同的圆表示信号强弱的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/805809

相关文章

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

全屋WiFi 7无死角! 华硕 RP-BE58无线信号放大器体验测评

《全屋WiFi7无死角!华硕RP-BE58无线信号放大器体验测评》家里网络总是有很多死角没有网,我决定入手一台支持Mesh组网的WiFi7路由系统以彻底解决网络覆盖问题,最终选择了一款功能非常... 自2023年WiFi 7技术标准(IEEE 802.11be)正式落地以来,这项第七代无线网络技术就以超高速

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语