1

変数「shake」をグローバル変数として宣言し、oncreate内に新しいオブジェクトを作成してから、これを呼び出します。

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

ホームボタンを押しても電話は振動します。onStop()を試しましたが、同じように機能しません。

私のアプリは次のようなものです:カウントダウン10秒、その後バイブレーション..しかし、問題はonPauseを呼び出すことができないため、カウントダウンティッカーで2分に設定されている場合、ユーザーはバイブレーションがどこから来ているのかを感じる可能性があります。

4

1 に答える 1

3

私はあなたのコードの残りを見ることができないので、私はいくつかのことを仮定するつもりです。

仮定#1

アクティビティを開いていて、カウントダウンが開始され、10秒後に期限切れになると、電話が振動します(アクティビティは開いたままです)。ホーム画面に移動すると、バイブレーションが止まります。

仮定#2

アクティビティを開いて、カウントダウンを開始します。10秒が経過する前に、ホーム画面に移動します。あなたの活動は見えませんが、電話はすぐに振動し始めます。

これがあなたが見ているものである場合、それは正しい振る舞いです。問題は、2番目のケースでは、ホーム画面に移動したときに、実際に振動が始まる前に、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であるため、実際には振動しません。

それが修正しようとしているものではない場合は、より多くのコードと正確なユースケースの説明で質問を更新してください。それが役に立てば幸い!

于 2012-10-24T18:00:52.290 に答える