контролировать интенсивность вибрации в телефонах Android? Является ли это возможным? - PullRequest
7 голосов
/ 22 мая 2010

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

Ответы [ 4 ]

10 голосов
/ 19 января 2013

Я сделал простой трюк, чтобы как-то снизить интенсивность вибрации.Моя идея - чередовать интервалы вибрации с тихими интервалами.Если у вас есть одна миллисекунда вибрации, а затем одна секунда тишины и т. Д., Кажется, что это одна постоянная вибрация, но она слабее, чем обычно.Вы можете попытаться увеличить интервалы тишины, чтобы вибрация стала еще слабее.Вот пример кода:

int strong_vibration = 30; //vibrate with a full power for 30 secs
int interval = 1000;
int dot = 1; //one millisecond of vibration
int short_gap = 1; //one millisecond of break - could be more to weaken the vibration
long[] pattern = {
        0,  // Start immediately
        strong_vibration, 
        interval,
        // 15 vibrations and 15 gaps = 30millis
        dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, //yeah I know it doesn't look good, but it's just an example. you can write some code to generate such pattern. 
    };
9 голосов
/ 22 мая 2010

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

http://developer.android.com/reference/android/os/Vibrator.html

2 голосов
/ 31 декабря 2013

ШИМ может быть использован для создания шаблона вибрации с различной длительностью импульса, что приводит к снижению среднего напряжения на двигателе вибратора (и, следовательно, к снижению вибрации).простое доказательство концепции метода здесь .Этот метод будет генерировать паттерн с указанной интенсивностью и продолжительностью.Переход в этом методе не совсем линейный, поэтому я опубликовал награду, чтобы надеяться получить некоторые альтернативные предложения.Обновлю, когда у меня будет еще лучший алгоритм.

1 голос
/ 27 апреля 2018

Это может помочь вам, но работает только для API уровня 26 или выше.

public void vibrate(View view) {
    Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {

        long[] wave_time = {0, 100, 0, 100, 0, 100, 0, 100, 0, 100};
        int[] wave_ampl = {0, 50, 0, 100, 0, 150, 0, 200, 0, 255};

        VibrationEffect vibrationEffect = null;
        vibrationEffect = VibrationEffect.createWaveform(wave_time, wave_ampl, -1);
        vibrator.vibrate(vibrationEffect);
    }

}

Здесь wave_time массив представляет два типа времени:

  1. Время, в которое он должен простаивать (0-й индекс, 2-й индекс, и т. Д.)
  2. Время, в которое оно должно вибрировать (1-й указатель, 3-й указатель и т. Д.)

wave_ampl массив представляет силу вибрации w.r.t wave_time массив.

Пояснение:

Телефон ожидает 0 мс (0-й индекс wave_time) и начинает вибрировать в течение 100 мс (1-й индекс wave_time) с интенсивностью 50 (1-й индекс wave_ampl).


Аналогично для телефона вибрирует в течение 100 мс (3-й индекс wave_time) с интенсивностью 100 (3-й индекс wave_ampl).


Максимальная интенсивность 255 в Android.

Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...