Как обнаружить сотрясение и поднять тост сообщение после встряхивания телефона 3 раза в android ... Может кто-нибудь помочь мне, поделившись кодом - PullRequest
0 голосов
/ 25 января 2020
package com.example.womenssafety;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private SensorManager sm;
private float acelVal,acelLast,shake;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sm=(SensorManager) getSystemService(Context.SENSOR_SERVICE);
        sm.registerListener(sensorListener,sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);

        acelVal=SensorManager.GRAVITY_EARTH;
        acelLast=SensorManager.GRAVITY_EARTH;
        shake=0.00f;
    }
private final SensorEventListener sensorListener = new SensorEventListener() {
    @Override
    public void onSensorChanged(SensorEvent event) {
        float x =event.values[0];
        float y =event.values[1];
        float z =event.values[2];
        acelLast=acelVal;
        acelVal=(float) Math.sqrt((double) (x*x)+(y*y)+(z*z));
        float delta= acelVal-acelLast;
        shake =shake*0.9f+delta;


        if(shake>12){
            Toast t =Toast.makeText(getApplicationContext(), "Dont Shake phone",Toast.LENGTH_LONG);
            t.show();
        }
    }
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
};
}

в этом коде это поджаривание сообщения после встряхивания телефона в течение 1 раза ... но я просто хочу точно получить сообщение с тостом после точного встряхивания телефона в 3 раза Как обнаружить сотрясение и тост сообщение после встряхивания телефона 3 раза в android ... Кто-нибудь может мне помочь, поделившись кодом

1 Ответ

1 голос
/ 05 февраля 2020

Добавьте это как Global Var

private static int counter = 0;

Теперь добавьте эти строки в ваш onSensorChanged

if (shake > 12) {
    counter++;
}

if (counter >= 3) {
    counter = 0;
    Toast t = Toast.makeText(getApplicationContext(), "Don't Shake phone", Toast.LENGTH_LONG);
    t.show();
}

Это будет отображать тост каждый раз, когда пользователь встряхивает телефон, я также предлагаем изменить Toast длину на LENGTH_SHORT

Надеюсь, это поможет!

...