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

时间:2015-04-13 11:41:00

标签: android broadcastreceiver sensor 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>

接收器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");
        }

最后我的问题是,当它被移动时没有检测到传感器,它检测到我的设备处于解锁状态然后它正在调用我的MainActivity ,但是我想检测我的设备动作是什么时候改变然后我想在接收器中检测到。我怎么能这样做?。

2 个答案:

答案 0 :(得分:10)

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

SensorManager sensorMan = (SensorManager)getSystemService(SENSOR_SERVICE);

Sensor sensor = sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

注册侦听器以侦听运动传感器中的更改 -

sensorMan.registerListener(context, sensor,
        SensorManager.SENSOR_DELAY_UI);

然后覆盖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
    }

答案 1 :(得分:1)

你不能也不应该这样做,因为当屏幕关闭时,传感器自动关闭,这是由系统在大多数设备中完成的,有些设备支持传感器在屏幕关闭后进行监听像nexus 4.但是你可以创建接收器,它将关闭屏幕和屏幕。

public class Screen扩展了BroadcastReceiver  {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            screenOn();
        }
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            screenOff();
        }

    }


    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
    intentFilter.addAction(Intent.ACTION_SCREEN_ON);
    mReceiver = new Screen();
    registerReceiver(mReceiver, intentFilter);