Android wifi和蓝牙进行位置扫描

时间:2019-03-08 17:56:38

标签: android-location

是否有打开wifi和蓝牙扫描的意图来要求用户提高位置准确性?

Example

更新:我发现了一种更好的方法来直接要求用户激活Wifi扫描,方法是:

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

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

进入该屏幕的方式如下:

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

对于Oreo:打开Android设置,转到“安全和位置”,“位置”,“扫描”

对于Pie:打开Android设置,依次转到“位置”,“高级”,“扫描”。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

  

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

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

注册接收器
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();
            }
相关问题