Как вибрировать устройство n раз через программирование на андроиде? - PullRequest
6 голосов
/ 04 мая 2011

Может кто-нибудь сказать мне, как вибрировать один и тот же звук 5 раз, как этот мой шаблон

long[] pattern = { 0, 200, 500 };

я хочу, чтобы этот шаблон повторялся 5 раз

Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern , 5);

Ответы [ 7 ]

17 голосов
/ 12 мая 2011

Я нашел решение, оно было очень простым:

long[] pattern = { 0, 100, 500, 100, 500, 100, 500, 100, 500, 100, 500};
vibrator.vibrate(pattern , -1);
3 голосов
/ 08 сентября 2017

От: Android Vibrator # вибрирует (long [], int)

Чтобы шаблон повторялся, передайте индекс в массив шаблонов, с которого начинается повтор, или -1, чтобы отключить повторение.

Вы должны инициализировать индекс 0

long[] pattern = { 0, 100, 500, 100, 500, 100, 500, 100, 500, 100, 500};
vibrator.vibrate(pattern , 0);
3 голосов
/ 10 сентября 2013

у меня работает следующее:

if(vibration_enabled) {
    final Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    if(v.hasVibrator()) {
        final long[] pattern = {0, 1000, 1000, 1000, 1000};
        new Thread(){
            @Override
            public void run() {
                for(int i = 0; i < 5; i++){ //repeat the pattern 5 times
                    v.vibrate(pattern, -1);
                    try {
                       Thread.sleep(4000); //the time, the complete pattern needs
                    } catch (InterruptedException e) {
                        e.printStackTrace();  
                    }
                }
            }
        }.start();
    }
}

Метод вибрации только запускает вибрацию, но не ожидает ее выполнения.

3 голосов
/ 04 мая 2011

Ваш код должен помочь. Просто убедитесь, что у вас есть <uses-permission android:name="android.permission.VIBRATE"/> в файле AndroidManifest.xml.

2 голосов
/ 03 июля 2017

Помимо приведенных выше решений, я создал свой собственный шаблон вибрации, где я могу контролировать размер продолжительности между вибрациями.startVibration () создает непрерывный регулярный шаблон вибрации в течение одной минуты.

stopVibration () - прекращает вибрацию или приостанавливает counterTimer, таким образом приостанавливая шаблон вибрации.

private time = 0;
private countDownTimer;

private void startVibration() {
    time = (int) System.currentTimeMillis();

    countDownTimer = new CountDownTimer(60000, 1000) {

        public void onTick(long millisUntilFinished) {

            time = (int) (millisUntilFinished / 1000);
            int[] timeLapse = {58, 55, 52, 49, 46, 43, 40, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1};
            for (int k = 0; k < timeLapse.length; k++) {
                if (time == timeLapse[k]) {
                    ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(1000);
                }
            }
        }

        public void onFinish() {
        }
    }.start();
}

private void stopVibration() {
    if (countDownTimer != null) {
        countDownTimer.cancel();
    }
}
0 голосов
/ 14 февраля 2019

Вот как я это сделал. Я динамически генерирую свой временной массив на основе того, сколько раз вызывающий абонент хочет, чтобы он вибрировал. В цикле начните с 1, чтобы избежать 0% 2, что приведет к дополнительной бесполезной задержке в конце.

private void vibrate(int times)
{
    Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
    {
        ArrayList<Long> timings = new ArrayList();

        timings.add(0L);

        for(int i = 1; i <= times; i ++)
        {

            if(i%2==0)
                timings.add(0L);

            timings.add(250L);


        }

        long[] arrTimings = new long[timings.size()];

        for(int j = 0; j < timings.size(); j++)
        {
            arrTimings[j] = timings.get(j);
        }

        vibrator.vibrate(VibrationEffect.createWaveform(arrTimings, -1));
    }
}
0 голосов
/ 07 декабря 2018

В методе public void vibrate (паттерн long [], int repeat) , паттерн long [] следует правилу: long [] pattern = {pauseTime1, vibTTime1, pauseTime2, vibTime2, pauseTime3, vibrationTime3, ...}, поэтому в результате вы получите нечетное количество значений, оно не будет работать. Вы должны закончить паттерн с вибрацией. Четное число значений делает работу (по крайней мере 4 значения).

long[] pattern = {0, 500, 200, 500}
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern , 5);
...