安卓振动器打开并关闭

时间:2012-04-01 14:58:08

标签: android radio-button vibrate ischecked

我正在我的应用程序中制作一个部分,如果你按下按钮,那么手机会振动,如果你再次按下按钮,手机就会停止振动。我正在为我的按钮使用单选按钮。我的代码现在是振动部分:

                while(hard.isChecked()==true){
                    vt.vibrate(1000);
                }

手机振动但不喜欢用全功率振动,单选按钮不会改变。我也无法将其关闭,因为手机基本冻结了。有人有任何想法来解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

你编写了一个无限循环。您的设备无法更改单选按钮的状态,因为它仍处于while循环中。

一种可能性是在单独的线程中启动振动代码。

另一种可能性是在你的while循环中添加一个Thread.Sleep(100)左右。

答案 1 :(得分:1)

你正在使用while循环hard.isChecked()这将永远是真的,现在它循环到无限循环。所以在while循环中使用break语句

while(hard.isChecked()==true){
    vt.vibrate(1000);
break;
 }

或者您可以使用以下代码:

if(hard.isChecked()){
   vt.vibrate(1000);
}

答案 2 :(得分:0)

我自己尝试过。我认为以下代码是您正在寻找的:

private Vibrator vibrator;
private CheckBox checkbox;
private Thread vibrateThread;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    vibrator = ((Vibrator)getSystemService(VIBRATOR_SERVICE));
    checkbox = (CheckBox)findViewById(R.id.checkBox1);
    vibrateThread = new VibrateThread();
}

public void onCheckBox1Click(View view) throws InterruptedException{
    if(checkbox.isChecked()){
        if (vibrateThread.isAlive()) {
            vibrateThread.interrupt();
            vibrateThread = new VibrateThread();
        } else {
            vibrateThread.start();
        }
    } else{
        vibrateThread.interrupt();
        vibrateThread = new VibrateThread();
    }
}

class VibrateThread extends Thread {
    public VibrateThread() {
        super();
    }
    public void run() {
        while(checkbox.isChecked()){                
            try {
                vibrator.vibrate(1000);
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

这里的布局:

<CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="CheckBox"
    android:onClick="onCheckBox1Click"/>