전화가 돌아 왔을 때 전화 화면이 아래를 향하고 전화기의 뒷면이 위를 향하고 있는지 감지하고 싶습니다. 내가 어떻게 해?안드로이드 - 전화가 뒤집힐 때 감지합니다.
기본적으로 나는 전화가 뒤집 혔을 때를 감지하고 싶다!
전화가 돌아 왔을 때 전화 화면이 아래를 향하고 전화기의 뒷면이 위를 향하고 있는지 감지하고 싶습니다. 내가 어떻게 해?안드로이드 - 전화가 뒤집힐 때 감지합니다.
기본적으로 나는 전화가 뒤집 혔을 때를 감지하고 싶다!
이렇게하려면 방향에 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
}
}
내가 Z-평면에서의 회전을 감지합니다. 아마도 xy 평면 일 것입니다. 어쨌든 나는 해결책을 찾았습니다. (http://android-er.blogspot.in/2011/02/detect-phone-flipping.html) – Naddy
서비스가없는 상태에서이를 감지 할 수있는 방법이 있습니까? 대신
powder366