我创建了一个应用,该应用可以从摇动的第一页转到第二页。但是从第二页开始,它不会回到第一页。关闭首页时,如何停止摇动活动?
我在两个页面中都实现了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
。
答案 0 :(得分:0)
正如我在您的代码中看到的那样,您在两个活动中都在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);
}