2012-04-01 11 views
0

Ich mache einen Teil in meiner App, wo, wenn Sie den Knopf drücken, dann wird das Telefon vibrieren, und wenn Sie den Knopf erneut drücken, hört das Telefon auf zu vibrieren. Ich verwende einen Radio-Button für meinen Button. mein Code ist jetzt für das Vibrieren Teil:Android-Vibrator einschalten und ausschalten

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

Die vibriert Telefon, aber es mag nicht Vibrieren mit voller Kraft und die Radiobutton ändert sich nicht. Ich kann es auch nicht abschalten, weil das Telefon im Grunde erstarrt. Hat jemand irgendwelche Ideen, um das zu beheben?

Antwort

0

Ich habe es versucht, mich. Ich denke, der Code unten ist, was Sie suchen:

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

Und hier das Layout:

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

Sie haben eine Endlosschleife programmiert. Ihr Gerät hat keine Möglichkeit, den Status Ihres Radio-Buttons zu ändern, da er sich immer noch in der While-Schleife befindet.

Eine Möglichkeit besteht darin, den Vibrationscode in einem separaten Thread zu starten.

Eine andere Möglichkeit ist das Hinzufügen eines Thread.Sleep (100) in Ihrer while-Schleife.

+0

ich es will tho ständig vibrieren, so setzen würde tht Thread.Sleep machen es so, es cont. vibrieren. –

+0

Ich habe es nicht getestet, aber solange der Schlafwert niedriger ist als der Vibrationswert sollte es so funktionieren. –

+0

Ich habe versucht, aber es hat immer noch nicht funktioniert Ich denke, ich kann nur zwei Tasten jetzt tun und haben Sie eine abbrechen und eine starten Sie es. Wenn Sie an etwas anderes denken, teilen Sie es bitte mit. –

1

Sie verwenden while loop hard.isChecked(), das für immer wahr sein wird, jetzt wird es in Endlosschleife. verwenden, um eine break-Anweisung in der while-Schleife

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

oder Sie den Code unten verwenden:

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

Nun, ich will es kontinuierlich vibrieren, also wenn ich in die Pause oder die if-Anweisung setze, würde es das so machen, dass das Telefon nur einmal für 1000 Milla Sekunden vibriert. –