Вибрация при удерживании кнопки

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

package one.two.bn;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.widget.Button;
import android.view.View.OnClickListener;



    public class Vb extends Activity {
            /** Called when the activity is first created. */
        private Button button1;
        private Vibrator vibrator;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            button1 = (Button)findViewById(R.id.button1);
            button1.setOnClickListener(new View.OnClickListener() {
            Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);    
        public void onClick(View v) {
                if(v==button1){ 
                vibrator.vibrate(300000);           
        }
    }

Если кто-то может помочь, большое спасибо.


person Lucas    schedule 24.04.2011    source источник
comment
Вам не хватает закрывающей скобки после setOnClickListener? Где вы его закрываете?   -  person BedirYilmaz    schedule 27.11.2012


Ответы (5)


Попробуйте этот код

Vibrator vibe = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE) ;

Затем в OnClickListener вашей кнопки:

vibe.vibrate(50); // 50 is time in ms

И не забывайте, что вам нужно добавить разрешение в манифест (после тега </application>):

<uses-permission android:name="android.permission.VIBRATE" />

Я также согласен с Тимом, потому что onTouchListener вызывается перед кликом, поэтому это дает лучший результат для вашего приложения.

person Bipin Vayalu    schedule 24.04.2011

Если вам нужна вибрация при длительном нажатии, как в ActionMode или ContextMenu,

view.setOnLongClickListener(new View.OnLongClickListener() {

    @Override
    public boolean onLongClick(View v) {
        v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
        return true;
    }
});
person Yaroslav Mytkalyk    schedule 03.10.2014

Используйте OnTouchListener() вместо onClick().

Внутри слушателя, когда MotionEvent.getAction() == MotionEvent.ACTION_DOWN, вы будете звонить vibrator.start(some arbitrarily large number here perhaps 1 minute or more)
А когда getAction() == MotionEvent.ACTION_UP звоните vibrator.cancel().

Таким образом, он начнет вибрировать, когда вы нажимаете вниз, и останавливается, когда вы поднимать.

person FoamyGuy    schedule 24.04.2011

button1.setOnClickListener(new View.OnClickListener() {
  [...]
public void onClick(View v) {
  if(v==button1){ // <- Don't need that...
    // Do Stuff...
  }
}});

Если вы используете внутренний класс для «onClickListener», вам не нужно проверять, является ли представление кнопкой, потому что только кнопка может вызвать этот метод «onClick».

Кроме того, если вы хотите, чтобы телефон вибрировал, пока вы удерживаете кнопку, используйте метод onLongClick.

person Lukas Knuth    schedule 24.04.2011

Добавьте разрешения на вибрацию в файле манифеста.

person Muhammad Imran Tariq    schedule 24.04.2011