onPause不会阻止我的振动器

时间:2012-10-24 16:39:55

标签: android android-vibration

我将变量'shake'声明为全局变量,然后我在oncreate中创建了新对象,然后我称之为:

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

虽然按下主页按钮,但我的手机仍然可以振动!我试过onStop(),同样不起作用..

我的应用程序是这样的:倒数10秒,之后振动..但问题是onPause无法调用,因此用户可能会感觉振动来自哪里如果它在倒计时自动收报机上设置2分钟..帮助!< / p>

1 个答案:

答案 0 :(得分: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为false,因此实际上不会振动。

如果这不是您要解决的问题,请使用更多代码和具体用例说明更新您的问题。希望它有所帮助!