如何取消警报框中的振动?

时间:2012-09-13 06:44:34

标签: android popup alertdialog vibrate

我正在创建一个应用程序,弹出一个警报框,必须振动,直到用户点击确定或取消
当我打开警报框但我点击确定或取消应用程序崩溃时,我的应用程序振动良好

这是用于创建带振动的警报框的编码

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();任何人都可以帮助我

5 个答案:

答案 0 :(得分:0)

尝试使用vibrate(3000);,相当于让设备振动3秒,试图取消已启动的服务。

答案 1 :(得分:0)

将警告标志从默认设置为

notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL

这样,通知不会引起振动。

如果你想让它振动,你必须在清单文件中给予权限 确保应用程序在清单中寻求振动权限。应用程序崩溃的原因是您的应用程序无权振动手机。

这是代码

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

编辑:

我认为你需要的是不同的东西。启动后需要一种方法来停止振动。

振动服务在不同的环境中运行,因此您可能无法直接与其通信。有几种方法可以做到这一点,但我建议另一种简单的方法。

不要连续运行振动,而是尝试运行一小段时间,并在对话框中放置一个计时器,以便在一段时间后振动。

这样,您就不必停止振动。一旦对话框被解除,计时器将停止发射并且振动将停止。您无需明确关闭振动。

答案 2 :(得分:0)

尝试在退出对话框之前取消振动器。有关详细信息,请参阅Vibrator class

答案 3 :(得分:0)

尝试如下......

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

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

    v.vibrate(pattern, -1);

答案 4 :(得分:0)

在你的代码中你有v.cancel();但是我可以看到这个变量没有初始化,你在函数vibration()内使用另一个变量尝试取消振动的初始化变量。
使用此功能

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();

P.S。我知道这是一个老问题,但也许有人想要答案。