0

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

这是我用于创建带有振动的警报框的代码

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

尝试使用vibrate(3000);which 相当于让设备振动 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 回答
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 回答