電話の画面が下向きで、電話の裏側が上向きになっていることを検出したいと思います。どうすればできますか?
基本的に、電話が裏返されたことを検出したい!
電話の画面が下向きで、電話の裏側が上向きになっていることを検出したいと思います。どうすればできますか?
基本的に、電話が裏返されたことを検出したい!
これが私がこれをした方法です:
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 度の回転であったかを確認できるように、以前の画面の向きを保存する必要がある場合もあります。