Как настроить различное обнаружение сотрясений в двух разных действиях? - PullRequest
0 голосов
/ 04 октября 2019

Я создал приложение, которое идет на вторую страницу с первой страницы на Shake. Но со второй страницы он не возвращается на первую страницу. Как я могу остановить действие сотрясения первой страницы, когда она закрыта?

Я реализовал onShake() метод на обеих страницах.

Это основное действие:

public class MainActivity extends AppCompatActivity implements ShakeDetector.Listener{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView t= (TextView) findViewById(R.id.t1);
        t.setText("Hello World");
        SensorManager SM=(SensorManager)getSystemService(SENSOR_SERVICE);
        ShakeDetector SD=new ShakeDetector(this);
        SD.start(SM);
    }

    @Override
    public void hearShake() {
        getWindow().getDecorView().setBackgroundColor(Color.GREEN);
        OpenActivityNew();
    }

    private void OpenActivityNew() {
        Intent intent=new Intent(this,TimeDone.class);
        finish();
        startActivity(intent);
    }
  }

Это второе занятие:

public class TimeDone extends AppCompatActivity implements  ShakeDetector.Listener{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.timer_layout);
        TextView t= (TextView) findViewById(R.id.t2);
        t.setText("This is Second Page");
        SensorManager SM=(SensorManager)getSystemService(SENSOR_SERVICE);
        ShakeDetector SD=new ShakeDetector(this);
        SD.start(SM);
    }

    @Override
    public void hearShake() {
        getWindow().getDecorView().setBackgroundColor(Color.GREEN);
        OpenActivityNew();
    }

    private void OpenActivityNew() {
        Intent intent=new Intent(this,MainActivity.class);
        finish();
        startActivity(intent);
    }

Я реализовал одно и то же для обоих классов, так что встряхивание с одной страницы перенесет на другую, и наоборот. Но он работает только с MainActivity.

1 Ответ

0 голосов
/ 04 октября 2019

Как я вижу в вашем коде, вы начали ShakeDetector внутри onCreate() в обеих операциях, но не остановили его. Поэтому вам нужно остановить его перед началом другого действия внутри вашего OpenActivityNew(), например:

SD.stopShakeDetector(getBaseContext());

Для этого, конечно, вам нужно объявить оба значения SensorManager SM и ShakeDetector SDза пределами onCreate(). Просто поместите их снаружи как переменную класса, и это должно работать нормально, как это:

MainActivity:

public class MainActivity extends AppCompatActivity implements ShakeDetector.Listener {
    private ShakeDetector SD;
    private SensorManager SM;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        SM=(SensorManager)getSystemService(SENSOR_SERVICE);
        SD=new ShakeDetector(this);
        ...
    }
    ...
    private void OpenActivityNew() {
        SD.stopShakeDetector(getBaseContext());
        Intent intent=new Intent(this,TimeDone.class);
        finish();
        startActivity(intent);
    }
...