Android:传感器ACCELEROMETER不在服务中工作

时间:2016-10-18 11:32:43

标签: android android-service android-sensors

我想在后台通过服务检测移动设备的动作,但我在服务中没有收到任何信息。

这是 Myservice

    public class MyService extends Service implements SensorEventListener {

        private SensorManager mSensorManager;
        static int count=0;
        private ShakeEventListener mSensorListener;
    /** OnShakeListener that is called when shake is detected. */


    public MyService() {
    }

    @Override//
    public int onStartCommand(Intent intent, int flags, int startId) {
        Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
      //registering Sensor
        Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

        mSensorManager.registerListener(mSensorListener,
                mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_UI);

        //then you should return sticky
        return Service.START_STICKY;
    }
    @Override
    public void onCreate() {

    }
    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }


    @Override
    public void onSensorChanged(SensorEvent se) {
        // get sensor when Change
        Toast.makeText(getApplicationContext(), "Detected", Toast.LENGTH_SHORT).show();


    }


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

}

的Manifest.xml

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera.flash" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service
        android:name=".MyService"
        android:enabled="true"
        android:exported="true"></service>
</application>

On Sensor Change Toast未显示,将不胜感激。

1 个答案:

答案 0 :(得分:0)

当我在 OnCreate

中添加以下行时,它有效
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

已修改我的服务

   public class MyService extends Service implements SensorEventListener {

        private SensorManager mSensorManager;
        static int count=0;
        private ShakeEventListener mSensorListener;
    /** OnShakeListener that is called when shake is detected. */


      public MyService() {
       }

    @Override//
    public int onStartCommand(Intent intent, int flags, int startId) {
        Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
      //registering Sensor
        Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

        mSensorManager.registerListener(mSensorListener,
                mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_UI);

        //then you should return sticky
        return Service.START_STICKY;
    }
    @Override
    public void onCreate() {
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        //add this line only
    }
    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }


    @Override
    public void onSensorChanged(SensorEvent se) {
        // get sensor when Change
        Toast.makeText(getApplicationContext(), "Detected", Toast.LENGTH_SHORT).show();


    }


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

}