Вибрировать при удержании кнопки - PullRequest
15 голосов
/ 24 апреля 2011

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

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

Если таковые могут помочь, большое спасибо.

Ответы [ 5 ]

67 голосов
/ 24 апреля 2011

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

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

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

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

И не забудьте добавить разрешение в манифест (после </application> tag):

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

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

32 голосов
/ 03 октября 2014

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

view.setOnLongClickListener(new View.OnLongClickListener() {

    @Override
    public boolean onLongClick(View v) {
        v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
        return true;
    }
});
6 голосов
/ 24 апреля 2011

Используйте 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().

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

0 голосов
/ 24 апреля 2011
button1.setOnClickListener(new View.OnClickListener() {
  [...]
public void onClick(View v) {
  if(v==button1){ // <- Don't need that...
    // Do Stuff...
  }
}});

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

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

0 голосов
/ 24 апреля 2011

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

...