Я хочу определить, когда телефон перевернут, то есть экран телефона обращен вниз, а задняя сторона телефона обращена вверх. Как мне это сделать?
В основном я хочу определить, когда телефон перевернут!
Я хочу определить, когда телефон перевернут, то есть экран телефона обращен вниз, а задняя сторона телефона обращена вверх. Как мне это сделать?
В основном я хочу определить, когда телефон перевернут!
Вот как я это сделал:
package com.example.accsensordemo.service;
import android.app.Service;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Vibrator;
import android.util.Log;
public class MotionControlService extends Service implements SensorEventListener {
private static final String TAG = "MotionControlService";
private float mGZ = 0;//gravity acceleration along the z axis
private int mEventCountSinceGZChanged = 0;
private static final int MAX_COUNT_GZ_CHANGE = 10;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand, Started: " + mStarted);
if (!mStarted) {
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_GAME);
mStarted = true;
}
return START_STICKY;
}
@Override
public void onSensorChanged(SensorEvent event) {
int type = event.sensor.getType();
if (type == Sensor.TYPE_ACCELEROMETER) {
float gz = event.values[2];
if (mGZ == 0) {
mGZ = gz;
} else {
if ((mGZ * gz) < 0) {
mEventCountSinceGZChanged++;
if (mEventCountSinceGZChanged == MAX_COUNT_GZ_CHANGE) {
mGZ = gz;
mEventCountSinceGZChanged = 0;
if (gz > 0) {
Log.d(TAG, "now screen is facing up.");
} else if (gz < 0) {
Log.d(TAG, "now screen is facing down.");
}
}
} else {
if (mEventCountSinceGZChanged > 0) {
mGZ = gz;
mEventCountSinceGZChanged = 0;
}
}
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
}
Для этого вам нужно зарегистрировать SensorEventListener в ориентации, а затем добавить обратный вызов в метод onSensorChanged. Логика, вероятно, будет очень похожа на компас, реализованный здесь: http://www.vogella.com/articles/AndroidSensor/article.html, за исключением того, что вы захотите проверить, равно ли значение sensorEvent ROTATION_0, ROTATION_90, ROTATION_180 или ROTATION_270, и действовать соответствующим образом.
Вам также, вероятно, потребуется сохранить предыдущую ориентацию экрана, чтобы вы могли проверить, был ли поворот на 180 градусов или только на 90 градусов.