Android wifi 和蓝牙扫描定位

Posted

技术标签:

【中文标题】Android wifi 和蓝牙扫描定位【英文标题】:Android wifi and bluetooth scanning for location 【发布时间】:2019-07-30 19:13:28 【问题描述】:

是否有意图打开wifi和蓝牙扫描意图,要求用户提高定位精度?

更新:我找到了一种更好的方法来直接要求用户激活 Wifi 扫描这样做:

WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager.isScanAlwaysAvailable()==false) 
   startActivity(new Intent(WifiManager.ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE));

所以,我现在的问题是:我怎样才能做同样的事情来请求扫描始终可用于蓝牙?我应该使用什么 Intent?

到那个画面的方法如下:

对于牛轧糖:打开 android 设置,转到位置,右上角的 3 点菜单,扫描。

对于奥利奥:打开 Android 设置,转到安全和位置、位置、扫描

对于 Pie:打开 Android 设置,转到位置、高级、扫描。

【问题讨论】:

【参考方案1】:

您可以使用LocationSettingsRequest 提示用户启用定位。在请求集builder.setNeedBle(true); 中启用蓝牙扫描。

如果蓝牙已打开,则不会要求用户启用蓝牙扫描。

【讨论】:

【参考方案2】:

持续扫描蓝牙可能会影响您的设备性能 和电池寿命。因此,请自行承担风险。

即使在发现完成后,下面的代码也会继续检查设备。 首先,确保使用

注册接收器
IntentFilter intentFilter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); 
registerReceiver(myReceiver, intentFilter);

然后尝试运行代码。

private BluetoothAdapter mBtAdapter;
mBtAdapter.startDiscovery();

private final BroadcastReceiver mReceiver = new BroadcastReceiver()

        @Override
        public void onReceive(Context context, Intent intent)
        
            String action = intent.getAction();

            // When discovery finds a device
            if (BluetoothDevice.ACTION_FOUND.equals(action))
            
            //do something
            

            else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action))
            
                Log.v(TAG,"Entered the Finished ");
                mBtAdapter.startDiscovery();
            

【讨论】:

我认为这不是我所问问题的答案。您的代码是搜索要配对的可用蓝牙设备的结果。我问的是另一件事。还是谢谢。 @Ton 你检查过this one吗? 我想要找到的是这个屏幕:打开 Android 设置,转到位置、高级、扫描。查看我编辑的答案

以上是关于Android wifi 和蓝牙扫描定位的主要内容,如果未能解决你的问题,请参考以下文章

Android 12 蓝牙适配

Qt低功耗蓝牙系列三(低功耗蓝牙客户端的程序设计纯Android代码)

Qt低功耗蓝牙系列三(低功耗蓝牙客户端的程序设计纯Android代码)

需要为 Android 6.0 上的蓝牙低功耗扫描启用位置

Android 10 扫描蓝牙失败问题

Android 蓝牙 LE 外设 IP 是静态的吗?