2

我正在构建一个小型应用程序,我需要仅在设备在我手中而不是在口袋中时才检测设备的运动。

现在,我构建了应用程序,但是当我走路或跑步时传感器事件被触发并且手机在我的口袋里?

无论如何,只有当有人拿着设备时才调用传感器更改?

谢谢,拉梅什

4

1 回答 1

0

您可以使用ACTION_USER_PRESENT意图首先检查电话是否正在使用或处于待机状态。之后,您可以实施加速度计来检测运动。这是一个例子:

public class SensorsActivity extends Activity implements SensorEventListener {
      private SensorManager sensorManager;

      @Override
      public void onCreate(Bundle savedInstanceState){

          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_sensors);

          sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

          sensorManager.registerListener(this,
                  sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                  SensorManager.SENSOR_DELAY_NORMAL);
      }

      public void onAccuracyChanged(Sensor sensor,int accuracy){

      }

         public void onSensorChanged(SensorEvent event){
              // check sensor type
          if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
                        // TODO after accelerometer detected do something here
          }
      }
}

对于您的ACTION_USER_PRESENT检测,您将需要一个BroadcastReceiver

public class SensorReceiver extends BroadcastReceiver {

      @Override
      public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();

            if (action.equals(Intent.ACTION_USER_PRESENT)) {
                  // TODO notify the user is present
            }
      }
}

并在您的Manifest.xml中声明它,如下所示:

<receiver android:name=".SensorReceiver">
        <intent-filter android:enabled="true" android:exported="false">
            <action android:name="android.intent.action.USER_PRESENT" />
        </intent-filter>
</receiver>


希望能帮助到你!

于 2013-01-07T19:43:08.443 回答