휴대 전화 화면이 위로 향하면 깜박이기 시작하는 응용 프로그램을 개발하고 있습니다. 휴대 전화의 화면이 아래를 향하고 있으면 손전등이 깜박임을 멈추는 것으로 가정합니다. 휴대폰의 화면이 위 또는 아래로 향하고 있는지 감지하기 위해 나는 가속도계를 사용하고있다. 화면의 방향을 감지하는 코드는 여기에 있습니다 :손전등을 사용하면 SensorListener 및 가속도계가 취소됩니다.
@Override
protected void onResume() {
super.onResume();
smAccelerometer.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
super.onPause();
smAccelerometer.unregisterListener(this);
}
@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.");
Toast toast = Toast.makeText(MainActivity.this, "Up", Toast.LENGTH_SHORT);
toast.show();
flashlightFrequency();
} else if (gz < 0) {
Log.d(TAG, "now screen is facing down.");
Toast toast = Toast.makeText(MainActivity.this, "Down", Toast.LENGTH_SHORT);
toast.show();
}
}
} else {
if (mEventCountSinceGZChanged > 0) {
mGZ = gz;
mEventCountSinceGZChanged = 0;
}
}
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
당신은 내가 간격으로 켜거나 손전등을 전환하는 방법 flashlightFrequency()
를 호출 화면이 위로 향하게 될 때마다이 코드에서 볼 수 있듯이 :
public void flashlightFrequency() {
String myString = "0101010101";
int frequency = 2000; //Delay in ms
CameraManager camManager;
String cameraId = null; // Usually front camera is at 0 position.
camManager = (CameraManager) getApplicationContext().getSystemService(Context.CAMERA_SERVICE);
try {
cameraId = camManager.getCameraIdList()[0];
} catch (CameraAccessException e) {
e.printStackTrace();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
for (int i = 0; i <= myString.length(); i++) {
if (i == myString.length()) {
flashlightFrequency();
}
if (myString.charAt(i) == '0') {
try {
camManager.setTorchMode(cameraId, true);
} catch (CameraAccessException e) {
e.printStackTrace();
}
} else {
try {
camManager.setTorchMode(cameraId, false);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(frequency);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
가속도계는 잘 작동하고 나는 방법 flashlightFrequency()
를 호출 때까지 화면 의 방향을 감지 할 수 있어요. 손전등이 시작되면 휴대 전화는 더 이상 동작을 등록하지 않습니다. 손전등이 SensorListener
을 취소 한 것 같습니다. 손전등을 켤 때마다 가속도계를 사용하여 화면의 방향을 감지 할 수 없습니다.