How to detect the turnover motion in android?

Zoltán Umlauf

If the user turns over the phone I want to react to that by stopping my text to speech reading. It would be a nice feature for my app, but how can I detect this motion? I'm not really familiar with motion sensors and I could not find this specific motion listener anywhere, mostly just screen orientations. Thanks for the help!

Bob Snyder

This sample activity demonstrates how a device's gravity sensor can be used to detect when the device is turned over. In method onSensorChanged(), term factor determines how complete the "turn over" must be. Typical range might be 0.7 to 0.95.

Support for Gravity Sensor was added in Android API 9. Not all devices have a gravity sensor.

public class MainActivity extends AppCompatActivity implements SensorEventListener {

    private static final String TAG = "Demo";

    private SensorManager mSensorManager;
    private Sensor mGravitySensor;
    private boolean mFacingDown;

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // nothing
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        final float factor = 0.95F;

        if (event.sensor == mGravitySensor) {
            boolean nowDown = event.values[2] < -SensorManager.GRAVITY_EARTH * factor;
            if (nowDown != mFacingDown) {
                if (nowDown) {
                    Log.i(TAG, "DOWN");
                } else {
                    Log.i(TAG, "UP");
                }
                mFacingDown = nowDown;
            }
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mGravitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);

        if (mGravitySensor == null) {
            Log.w(TAG, "Device has no gravity sensor");
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (mGravitySensor != null) {
            mSensorManager.registerListener(this, mGravitySensor, SensorManager.SENSOR_DELAY_NORMAL);
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(this);
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

How can a JavaScript app detect if a Leap Motion device is connected

分類Dev

How to get top 10 customers with most turnover?

分類Dev

How to detect a call Drop in android

分類Dev

How to detect if android application is minimized or not in Android Kotlin

分類Dev

How to detect Daylight Saving Time transition in android

分類Dev

How to detect if Chromecast is already connected on Android Sender?

分類Dev

How to detect programmatically if "Android App" is running in chrome book or in Android phone

分類Dev

How do I detect fail to connect wifi in android?

分類Dev

how to detect if the drop down menu is shown above or below the spinner in android?

分類Dev

How to detect installed Chrome version from my Android App?

分類Dev

How to detect installed Chrome version from my Android App?

分類Dev

How to detect screen orientation in a master/detail flow in android

分類Dev

How to fill/calculate motion_val in FFMPEG?

分類Dev

how to achieve this motion blur shader effect?

分類Dev

How to use Arduino 9 axes motion shield

分類Dev

Detect a screenshot Android

分類Dev

Android Detect if vehicle moving

分類Dev

Android Detect if vehicle moving

分類Dev

How to detect if debugging

分類Dev

How to detect locale?

分類Dev

How to detect locale?

分類Dev

How to detect a click on a polyline

分類Dev

How to detect if IndexedDB is enabled

分類Dev

How to detect dict modification?

分類Dev

How to detect WindowState changes?

分類Dev

How to detect if a function exists?

分類Dev

How to detect if a disk is seeking?

分類Dev

how to detect image is graycscale or not

分類Dev

How to detect CDP by tcpdump

Related 関連記事

ホットタグ

アーカイブ