1

我将变量“shake”声明为全局变量,然后在 oncreate 中创建新对象,然后调用它:

@Override
public void onPause() {
    super.onPause();
    shake.cancel();
}

按下home键,我的手机还是会震动!我试过onStop(),同样不起作用..

我的应用程序是这样的:倒计时 10 秒,然后振动.. 但问题是 onPause 不能被调用,所以如果在倒计时代码上设置了 2 分钟,用户可能会感觉到振动来自哪里.. 帮助!

4

1 回答 1

3

由于我看不到您的其余代码,因此我将假设一些事情。

假设 #1

如果您打开了活动,并且倒计时开始并在 10 秒后结束,则您的手机会振动(您的活动仍处于打开状态)。如果您转到主屏幕,则振动停止。

假设 #2

您的活动已打开,倒计时开始。在 10 秒到期之前,您转到主屏幕。您的活动不可见,但手机很快就会开始振动。

如果这是您所看到的,那么这是正确的行为。问题在于,在第二种情况下,当您进入主屏幕时,您的 onPause() 中的shake.cancel() 会在实际开始振动之前被调用。Shake.cancel() 只能在它已经振动时取消。

如果这就是您要解决的问题(我只能假设,因为我看不到您的其余代码),您可以试试这个:

private boolean mAllowShake = false;
@Override
public void onResume() {
   super.onResume();
   mAllowShake = true;
}

@Override
pulic void onPause() {
   super.onPause();
   mAllowShake = false;
   shake.cancel();
}

// wherever you are calling the shake.vibrate()
if (mAllowShake)
   shake.vibrate();

这样,当您的活动不可见并且您的计时器关闭时,由于 mAllowShake 为假,它实际上不会振动。

如果这不是您要解决的问题,请使用更多代码和对您的确切用例的描述来更新您的问题。希望能帮助到你!

于 2012-10-24T18:00:52.290 回答