【问题标题】:How to set different shake detection in two different activities?如何在两个不同的活动中设置不同的抖动检测?
【发布时间】:2019-10-04 18:59:59
【问题描述】:

我创建了一个应用程序,该应用程序在摇动时从第一页转到第二页。但是从第二页开始,它并没有回到第一页。第一个页面关闭时如何停止摇晃活动?

我在两个页面中都实现了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

【问题讨论】:

  • 嗨!请将所有相关代码添加到问题中!至少你的两个 Activity 中的相关代码包含你用来在它们之间移动的逻辑。

标签: android android-studio android-activity shake


【解决方案1】:

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

SD.stopShakeDetector(getBaseContext());

为此,当然,您需要在onCreate() 之外声明SensorManager SMShakeDetector SD。只需将它们作为 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);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多