首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >startLeScan:无法获取BluetoothLeScanner

startLeScan:无法获取BluetoothLeScanner
EN

Stack Overflow用户
提问于 2015-07-21 18:12:37
回答 3查看 3.6K关注 0票数 3

我正在尝试实现一个应用程序,当使用手机的人移动时启动BLE扫描,如果超过10秒没有移动,则自动关闭,而移动检测工作正常BLEscanner出了问题这里是代码

代码语言:javascript
复制
import android.annotation.SuppressLint;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.bluetooth.le.BluetoothLeScanner;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;


public class MainActivity extends Activity implements SensorEventListener {
    private TextView textView,textView1;
    private SensorManager mSensorManager;
    private Sensor mStepDetectorSensor;
    private BluetoothAdapter BA;
    private BluetoothManager manager;
    private BluetoothDevice device;
    long initialseconds;
    public static String Address;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mSensorManager =(SensorManager)getSystemService(Context.SENSOR_SERVICE);
         mStepDetectorSensor=mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
        manager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
        BA = manager.getAdapter();
        // BA = BluetoothAdapter.getDefaultAdapter();
        timeup t = new timeup();
        t.start();
}


public void onSensorChanged(SensorEvent event) {
    long initialtime=System.currentTimeMillis();
    initialseconds=initialtime/1000;
    if(!BA.isEnabled()){
        BA.enable();
        discoverBLEDevices();
    }
}

@SuppressLint("NewApi")
private void discoverBLEDevices() {
    Log.e("HIT", "HIT");
    BA.startLeScan(mLeScanCallback);
}

@SuppressLint("NewApi")
private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {

    @SuppressLint("NewApi")
    public void onLeScan(final BluetoothDevice device, int rssi,
                         byte[] scanRecord) {
        Address = device.getAddress();
        String Name = device.getName();

    }
};


@Override
public void onAccuracyChanged(Sensor sensor, int accuracy)
{

}
@Override
public void onResume()
{
    super.onResume();

    mSensorManager.registerListener(this, mStepDetectorSensor, SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
public void onPause()
{
    super.onPause();
    mSensorManager.unregisterListener(this);
}


public class timeup extends Thread{
    public void run(){
        boolean always=true;
        while(always) {
            long currenttime=System.currentTimeMillis();
            long currentseconds=currenttime/1000;
            if(currentseconds-initialseconds>10){
                BA.disable();
            }
        }
    }
}

错误在日志中显示为:

代码语言:javascript
复制
timeStamp/com.domain.www D/BluetoothAdapter: startLeScan: cannot get BluetoothLeScanner
EN

回答 3

Stack Overflow用户

发布于 2016-08-10 02:39:49

刚在处理Cordova问题时遇到了同样的问题。在我意识到这个问题之前,我到处寻找答案(包括这个问题)。我忘了打开手机上的蓝牙了。

所以,要么在你的手机上打开蓝牙模式,要么让一些弹出窗口提醒用户,并以编程方式为他们打开蓝牙模式。

票数 1
EN

Stack Overflow用户

发布于 2016-11-15 20:19:19

代码语言:javascript
复制
public void onSensorChanged(SensorEvent event) {....}

您应该等待BA启用,然后再次尝试获取适配器,如下所示:

代码语言:javascript
复制
BA = manager.getAdapter()

然后开始扫描;

票数 0
EN

Stack Overflow用户

发布于 2015-07-21 18:19:22

在任何扫描开始之前,请遵循以下页面进行所有验证:https://developer.android.com/guide/topics/connectivity/bluetooth-le.html

并确保您的设备支持蓝牙低能耗。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31536191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档