Не удается остановить BluetoothAdapter, запущенный из фоновой службы - PullRequest
0 голосов
/ 13 июня 2018

У меня есть служба, которая работает в фоновом режиме. Эта служба будет искать устройства Bluetooth после того, как приложение будет уничтожено пользователем.

<service android:name=".BLEBackgroundService"
        android:enabled="true"
        android:process=":externalBLEProcess"/>

в классе BLEBacgroundService У меня есть:

public class BLEBackgroundService extends Service{
    .
    .
    .
    public BLEDetector bleDetector;

    public int onStartCommand(Intent intent, int flags, int startId) {
        .
        .
        .
        Log.i(tag,"onStartCommand");            
        startScan();
        return START_STICKY;
    }

    void startScan() {
        bleDetector.startScan();
        Log.d(tag,"StartScan");
    }

    @Override
    public void onDestroy() {
        bleDetector.stopScan();
        Log.w(tag,"Service OnDestroy");
        super.onDestroy();
    }
}

И в моем классе BLEDetector у меня есть:

public class BLEDetector{
    .
    .
    .

    BluetoothAdapter mBAdapter;
    public void stopScan(){
        Log.i(tag,"StopScan");
        mBAdapter.stopLeScan(stopCallback);
    }
}

, и в своей деятельности я запускаю эту службу вот так:

public class MyActivity extends AppCompatActivity{
    Intent serviceIntent;
    .
    .
    .
    //This part is inside a Retrofit Callback onResponse
    serviceIntent = new Intent(ItemListActivity.this,BLEBackgroundService.class);    

    serviceIntent.putExtra
    (BasicUtils.getStringResource(getApplicationContext()
    ,R.string.beaconJsonIdentifier),new Gson().toJson(beaconModel));

    serviceIntent.putExtra
    (BasicUtils.getStringResource
    (getApplicationContext(),R.string.currssiID), prgss);

    if (BleUtil.isBluetoothEnabled(getApplicationContext()))
                        startService(serviceIntent);
    }
    public void disableService(){
        stopService(serviceIntent);
    }

И когда я пытаюсь остановить этосервис я просто звоню disableService().Когда я запускаю службу, она успешно вызывает onCreate, и служба начинает работать в отдельном процессе, который я вижу в журналах Logcat. Но когда я пытаюсь остановить службу, она печатает

1 Ответ

0 голосов
/ 18 июня 2018

Наконец, прочитав эту часть документа, я понял, что иногда моя служба onStartCommand вызывается дважды (что я понятия не имею, почему) и с тех пор, как я создал bleDetector каждый раз onStartCommand функциюмне звонили, я потерял ссылку на него.

Так что все, что мне нужно было сделать, это проверить, было ли bleDetector нулевым или нет.

Как бы то ни было, я понятия не имею, почему onStartCommand вызывается несколько раз. Я вызываю startService только один раз в своей деятельности, когда получаю успешный ответ от сервера с использованием дооснащения.

РЕДАКТИРОВАТЬ :

Иногдав моей деятельности onResume вызывается несколько раз, и именно поэтому мой startService вызывается несколько раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...