我创建了一个应用,该应用可以从摇动的第一页转到第二页。但是,它不会从第二页返回到第一页。关闭首页时,如何停止摇动活动?
我在两个页面中都实现了onShake()方法。
这是主要活动:
公共类MainActivity扩展AppCompatActivity实现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中起作用。
[正如我在您的代码中看到的,您在两个活动中都在ShakeDetector
中启动了onCreate()
,但没有停止它。因此,您需要先停止它,然后再在OpenActivityNew()
内部启动另一个活动,如下所示:
SD.stopShakeDetector(getBaseContext());
,为此,您当然需要在SensorManager SM
之外声明ShakeDetector SD
和onCreate()
。只需将它们作为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);
}