0

ユーザーが[OK]をクリックするかアプリをキャンセルするまで振動する必要があるアラートボックスをポップアップするアプリを作成していますアラートボックスを
開くとアプリが振動しますが、[OK]をクリックするかアプリのクラッシュをキャンセルするとアプリがクラッシュします

これは、バイブレーション付きのアラート ボックスを作成するために使用したコーディングです。

Vibrator v;
button = (Button) findViewById(R.id.buttonAlert);

button.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            vibration();
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    context);
                alertDialogBuilder.setTitle("Your Title");
                alertDialogBuilder.setMessage("Click yes to exit!")
                    .setCancelable(false)
                    .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            MainActivity.this.finish();
                            v.cancel();

                        }
                      })
                    .setNegativeButton("No",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {

                            dialog.cancel();
                            v.cancel();
                        }
                    });


                    AlertDialog alertDialog = alertDialogBuilder.create();


                    alertDialog.show();
                }

            });

これはバイブレーション方式です

public  void vibration()
    {

        Vibrator v = (Vibrator) context.getSystemService(context.VIBRATOR_SERVICE);

        long[] pattern = { 0, 3000, 3000 };


        v.vibrate(pattern, 0);
//      v.vibrate(5000);

    }

Vibrator.cancel(); を使用するとエラーが発生します。または v.cancel(); 誰でも私を助けることができます

4

5 に答える 5

0

あなたのコードではv.cancel();、この変数が初期化されていないことがわかります。関数内で別の変数を使用してvibration()、初期化されたvibrate変数をキャンセルしようとしています。
この機能を使用します

public Vibrator vibration() {

    Vibrator v = (Vibrator) getSystemService(VIBRATOR_SERVICE);

    long[] pattern = { 0, 3000, 3000 };

    v.vibrate(pattern, 0);
    // v.vibrate(5000);
    return v;

}

そのような振動を開始します

final Vibrator v = vibration();

PS私はそれが古い質問であることを知っていますが、誰かが答えを求めているかもしれません.

于 2014-11-14T13:59:00.270 に答える
0

以下のようにしてみてください.....

    Vibrator v = (Vibrator) context.getSystemService(context.VIBRATOR_SERVICE);

    long[] pattern = {0,1000,1000};

    v.vibrate(pattern, -1);
于 2012-09-13T07:00:26.147 に答える
0

vibrate(3000);開始されたサービスをキャンセルしようとする代わりに、デバイスを 3 秒間振動させるのに相当するものを使用してみてください。

于 2012-09-13T06:48:31.993 に答える
0

アラート フラグをデフォルトから

notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL

このように、通知は振動しません。

また、振動させたい場合は、マニフェストファイルで許可を与える必要があります。アプリケーションがマニフェストで振動許可を求めていることを確認してください。アプリケーションのクラッシュは、アプリケーションが電話を振動させる権限を持っていないことが原因です。

ここにコードがあります

<uses-permission android:name="android.permission.VIBRATE" />

編集:

必要なものは違うと思います。開始後に振動を止める方法が必要です。

バイブレーション サービスは別のコンテキストで実行されるため、直接通信できない場合があります。方法はいくつかありますが、別の簡単な方法をお勧めします。

バイブレーションを継続的に実行する代わりに、短い間隔で実行してみて、しばらくするとバイブレーションを開始するタイマーをダイアログに配置してください。

この方法では、振動を止める必要はありません。ダイアログが閉じられるとすぐに、タイマーの起動が停止し、振動が停止します。バイブレーションを明示的にオフにする必要はありません。

于 2012-09-13T06:49:10.373 に答える
0

ダイアログを終了する前にバイブレータをキャンセルしてみてください。詳細については、バイブレーター クラスを参照してください。

于 2012-09-13T06:49:20.690 に答える