Android вибратор включить и выключить - PullRequest
0 голосов
/ 01 апреля 2012

Я делаю одну часть в своем приложении, где, если вы нажмете кнопку, телефон будет вибрировать, и если вы нажмете кнопку еще раз, телефон перестанет вибрировать. Я использую радио кнопку для моей кнопки. мой код прямо сейчас для вибрирующей части:

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

Телефон вибрирует, но не любит вибрировать при полной мощности, и переключатель не меняется. Я также не могу выключить его, потому что телефон в основном зависает. У кого-нибудь есть идеи, чтобы это исправить?

Ответы [ 3 ]

1 голос
/ 01 апреля 2012

Вы используете while цикл hard.isChecked (), который будет истинным всегда, теперь он зацикливается на бесконечный цикл. так что используйте оператор break в цикле while

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

или вы можете использовать следующий код:

if(hard.isChecked()){
   vt.vibrate(1000);
}
1 голос
/ 01 апреля 2012

Вы запрограммировали бесконечный цикл.У вашего устройства нет шансов изменить состояние вашей радиокнопки, потому что оно все еще находится в цикле while.

Одна из возможностей - запустить вибрационный код в отдельной теме.это добавить Thread.Sleep (100) или около того в ваш цикл while.

0 голосов
/ 09 апреля 2012

Я сам попробовал.Я думаю, что код ниже это то, что вы ищете:

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"/>
...