如何在两个不同的活动中设置不同的抖动检测?
How to set different shake detection in two different activities?
我创建了一个应用程序,它可以在摇动时从第一页转到第二页。但是从第二页开始,它不会回到第一页。如何停止第一页关闭时的抖动activity?
我在两个页面中都实现了 onShake()
方法。
这是主要的Activity:
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);
}
}
这是第二个Activity:
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
.
正如我在您的代码中看到的那样,您在两个活动中都在 onCreate()
中启动了 ShakeDetector
,但没有停止。所以你需要在开始另一个 Activity 之前停止它,在你的 OpenActivityNew()
里,像这样:
SD.stopShakeDetector(getBaseContext());
为此,当然,您需要在onCreate()
之外声明SensorManager SM
和ShakeDetector 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);
}
我创建了一个应用程序,它可以在摇动时从第一页转到第二页。但是从第二页开始,它不会回到第一页。如何停止第一页关闭时的抖动activity?
我在两个页面中都实现了 onShake()
方法。
这是主要的Activity:
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);
}
}
这是第二个Activity:
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
.
正如我在您的代码中看到的那样,您在两个活动中都在 onCreate()
中启动了 ShakeDetector
,但没有停止。所以你需要在开始另一个 Activity 之前停止它,在你的 OpenActivityNew()
里,像这样:
SD.stopShakeDetector(getBaseContext());
为此,当然,您需要在onCreate()
之外声明SensorManager SM
和ShakeDetector 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);
}