Вибрация при нажатой кнопке

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

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

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

Ответы

Ответ 1

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

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 вызывается перед щелчком, поэтому он дает лучший результат для вашего приложения.

Ответ 2

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

view.setOnLongClickListener(new View.OnLongClickListener() {

    @Override
    public boolean onLongClick(View v) {
        v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
        return true;
    }
});

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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