如何在两个不同的活动中设置不同的抖动检测?

时间:2019-10-04 18:59:59

标签: android android-studio android-activity 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 :(得分:0)

正如我在您的代码中看到的那样,您在两个活动中都在ShakeDetector内启动了onCreate(),但没有停止它。因此,您需要先停止它,然后再在OpenActivityNew()内部启动另一个活动,如下所示:

SD.stopShakeDetector(getBaseContext());

为此,您当然需要在SensorManager SM之外声明ShakeDetector SDonCreate()。只需将它们作为Class变量放在外面,就可以像这样正常工作:

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);
    }