1

電話の画面が下向きで、電話の裏側が上向きになっていることを検出したいと思います。どうすればできますか?

基本的に、電話が裏返されたことを検出したい!

4

2 に答える 2

6

これが私がこれをした方法です:

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
    }
}
于 2014-04-09T03:11:18.300 に答える
0

これを行うには、オリエンテーションで SensorEventListener を登録し、onSensorChanged メソッドにコールバックを追加する必要があります。ロジックはおそらく、ここで実装されているコンパスと非常によく似ています: http://www.vogella.com/articles/AndroidSensor/article.html、ただし、sensorEvent の値がROTATION_0、ROTATION_90、ROTATION_180、または ROTATION_270 であり、それに応じて動作します。

また、回転が 180 度の回転であったか、90 度の回転であったかを確認できるように、以前の画面の向きを保存する必要がある場合もあります。

于 2013-07-21T16:04:01.470 に答える