Я хочу определить, когда телефон повернут, а экран телефона обращен вниз, а задняя сторона телефона направлена вверх. Как мне это сделать?Android-обнаружит, когда телефон перевернулся
В основном я хочу определить, когда телефон перевернут!
Я хочу определить, когда телефон повернут, а экран телефона обращен вниз, а задняя сторона телефона направлена вверх. Как мне это сделать?Android-обнаружит, когда телефон перевернулся
В основном я хочу определить, когда телефон перевернут!
Для этого вам необходимо зарегистрировать SensorEventListener по ориентации, а затем добавить обратный вызов к методу onSensorChanged. Логика, вероятно, будет очень похожа на реализованный здесь компас: http://www.vogella.com/articles/AndroidSensor/article.html, за исключением того, что вы хотите проверить, является ли значение sensorEvent значением ROTATION_0, ROTATION_90, ROTATION_180 или ROTATION_270 и действует соответствующим образом.
Вам также, вероятно, потребуется сохранить предыдущую ориентацию экрана, чтобы вы могли проверить, было ли вращение на 180 градусов или только поворот на 90 градусов.
Вот как я это сделал:
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
}
}
Я хочу, чтобы обнаружить вращение в плоскости г. Это, вероятно, для xy-plane. В любом случае я нашел решение [здесь] (http://android-er.blogspot.in/2011/02/detect-phone-flipping.html) – Naddy
Есть ли способ обнаружить его без службы и вместо этого через
powder366