无法阻止BluetoothAdapter从后台服务启动

时间:2018-06-13 13:37:33

标签: android android-service

我有一个在后台进程中运行的服务。该服务将在用户杀死应用程序后搜索蓝牙设备。

<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 :(得分:0)

最后,在阅读了this部分文档后,我意识到有时我的服务onStartCommand函数被调用两次(我不知道为什么),因为我每次创建bleDetector {{} 1}}函数被调用,我失去了对它的引用。

所以我所要做的就是检查onStartCommand是否为空。

我怎么也不知道为什么bleDetector被多次调用。当我使用改造从服务器获得成功的响应时,我只在我的活动中调用onStartCommand

修改

有时在我的活动中,多次调用startService,这就是多次调用onResume的原因。