从Android服务启动LocationListener和SensorEventListener

时间:2017-03-14 17:08:38

标签: android service locationlistener

我正在设计一个小型Android应用程序,我希望注册两个侦听器,一个用于位置更改,另一个用于来自我服务的onStartCommand的传感器事件。

我希望两个监听器同时工作,我已经在两个独立的处理程序中启动了监听器,但令我惊讶的是只有一个监听器正在工作。

我是android的新手,任何人都可以给我一些关于如何从一个Android服务注册到不同类型的监听器的见解。

以下是代码段。

@覆盖     public int onStartCommand(Intent intent,int flags,int startId){

    Toast.makeText(getBaseContext(), "Service Started", Toast.LENGTH_SHORT).show();

    runnableSpeed = new Runnable() {
        public void run() {
            startLocationListener();
        }
    };
    handlerSpeed.postDelayed(runnableSpeed, 1000);

    runnableGForce = new Runnable() {
        public void run() {
            startAccelerometerListener();
        }
    };
    handlerGForce.postDelayed(runnableGForce, 1000);


    return START_STICKY;
}

private void startLocationListener(){

    Toast.makeText(getBaseContext(), "Location: Thread Name" + Thread.currentThread().getName(), Toast.LENGTH_SHORT).show();

    locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    try {
        gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    } catch (Exception ex) {
    }
    try {
        network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    } catch (Exception ex) {
    }
    Log.v("Debug", "in on create.. 2");


    if (network_enabled) {
        locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
        Log.v("Debug", "Disabled..");
    }
    if (gps_enabled) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
        Log.v("Debug", "Enabled..");
    }
    Log.v("Debug", "in on create..3");
}

private void startAccelerometerListener() {
    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    sensorManager.registerListener(acceleromterListener, accelerometer, SensorManager.SENSOR_DELAY_FASTEST);
}

如果我运行任何一个监听器,它们都可以单独工作,但当我同时运行它们时,只会调用传感器事件。

此外,当我打印当前线程名称时,它总是显示主线程,认为两个侦听器都是分别注册的。

0 个答案:

没有答案