2015-07-21 1 views
2

Я пытаюсь реализовать приложение, которое запускает сканирование BLE, когда человек с телефоном перемещается, и автоматически отключается, если нет движения более 10 секунд, в то время как обнаружение движения работает нормально пойдет не так с BLEscanner здесь кодstartLeScan: не удается получить BluetoothLeScanner

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(); 
      } 
     } 
    } 
} 

ошибка показывает Вход как:

timeStamp/com.domain.www D/BluetoothAdapter: startLeScan: cannot get BluetoothLeScanner 
+0

Пожалуйста, будьте более конкретным. В какой части кода это не удается? Какая ошибка? –

+0

BA.startLeScan (mLeScanCallback); он записывает хит, но затем говорит startLeScan(): null startLeScan: невозможно получить BluetoothLeScanner –

ответ

-2

Пожалуйста, следуйте эту страницу за все проверки перед любым началом сканирования: https://developer.android.com/guide/topics/connectivity/bluetooth-le.html

И убедитесь, что ваше устройство поддерживает низкую энергию bluetooth.

+1

да я работаю с nexus 5, работает 5.0.1 –

1

Только столкнулся с этой же проблемой при работе над проблемой Кордовы. Я посмотрел на все, чтобы найти ответ (включая этот вопрос), прежде чем я понял проблему. Я забыл включить Bluetooth на свой телефон.

Итак, включите режим Bluetooth на вашем телефоне или у вас есть всплывающее окно, чтобы предупредить пользователя и программно включить его для них.

0
public void onSensorChanged(SensorEvent event) {....} 

вы должны ждать, пока BA не Enabled, а затем попытаться получить адаптер, как следовать снова:

BA = manager.getAdapter() 

затем начать сканирование;

Смежные вопросы