我将如何在广播接收器中检测运动传感器?

Han*_*man 19 android sensor broadcastreceiver android-sensors

我在Manifest.xml中编写了一个接收器来检测设备运动是否发生了变化

 <receiver android:name="com.hanuman.sensor.receiver.SensorReceiver" >
            <intent-filter
                android:enabled="true"
                android:exported="false" >
                <action android:name="android.intent.action.USER_PRESENT" />
            </intent-filter>
        </receiver>
Run Code Online (Sandbox Code Playgroud)

和内部接收器onReceive()方法代码是:

String action = intent.getAction();
        if (action.equals(Intent.ACTION_USER_PRESENT)) {
            System.out.println("User is present");
            Intent s = new Intent(context, MainActivity.class);
            s.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(s);
        } else {
            System.out.println("User is not present");
        }
Run Code Online (Sandbox Code Playgroud)

最后我的问题是,当它被移动时没有检测到传感器,它正在检测我的设备何时解锁然后它正在调用我的MainActivity,但我想检测我的设备运动何时被更改然后我想在接收器中检测到.我怎样才能做到这一点?.

小智 10

获取SensorManager的对象,如下所示 -

SensorManager sensorMan = (SensorManager)getSystemService(SENSOR_SERVICE);

Sensor sensor = sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Run Code Online (Sandbox Code Playgroud)

注册监听器以监听运动传感器的变化 -

sensorMan.registerListener(context, sensor,
        SensorManager.SENSOR_DELAY_UI);
Run Code Online (Sandbox Code Playgroud)

然后重写onSensorChanged()方法以检测更改 -

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
    //do some stuff
    }
    //do some other code for other Sensor type
    }
Run Code Online (Sandbox Code Playgroud)