簡體   English   中英

Android:Sensor ACCELEROMETER無法在服務中使用

[英]Android: Sensor ACCELEROMETER Not working in 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() {

    }
    @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>

如果未顯示Sensor Change Toast,將不勝感激。

當我在OnCreate中添加以下行時,它起作用了

        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

編輯的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() {
    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) {
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM