2012-04-01 17 views
0

私のアプリでは、ボタンを押すと携帯電話が振動し、もう一度ボタンを押すと振動が止まるアプリで1つの部分を作っています。私は自分のボタンにラジオボタンを使用しています。アンドロイドバイブレータの電源をオンにしてからオフにする

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

電話が振動するが、それはフルパワーで振動を好きではない、とラジオボタンは変更されません:私のコードは、振動する部分のために、今あります。電話機は基本的にフリーズしているので、私はそれをオフにすることもできません。誰でもこれを修正するためのアイデアはありますか?

答えて

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

無限ループをプログラミングしました。あなたのデバイスはあなたのラジオボタンの状態を変更する機会がありません。なぜなら、それはまだwhileループにあるからです。

1つの可能性は、振動コードを別のスレッドで開始することです。

もう1つの方法は、whileループにThread.Sleep(100)を追加することです。

+0

私はそれが継続的にそれがCONTようTHTはそれを作るのThread.sleep置くカントー振動するようにしたい私は、以下のコードは、あなたが探しているものだと思います。振動する。 –

+0

私はそれをテストしていませんが、睡眠の値が振動の値より低い限り、それはそのように動作するはずです。 –

+0

私はしようとしましたが、それでもまだ動作しませんでした。今は2つのボタンを押して、キャンセルして1つ起動するようにしてもよいと思います。あなたが何かを考えているなら、共有してください。 –

1

whileループwhile.isChecked()を使用していますが、これは永遠に真であり、今度は無限ループにループします。そのwhileループ

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

にbreak文を使用するか、以下のコードを使用することができます。

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

よく私はそれが絶えず振動したいので、もし私が休憩やif文を入れればそれは電話が1000ミラ秒間に一度しか振動しないようにします。 –

関連する問題