Имитация API 29 вибрации в 26 и ниже - PullRequest
0 голосов
/ 14 февраля 2020

Я хочу смоделировать вибрационные эффекты API 29:

EFFECT_CLICK
EFFECT_DOUBLE_CLICK
EFFECT_HEAVY_CLICK
EFFECT_TICK

в версии 26 и ниже. Кто-нибудь знает, как они переводятся?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Вот что я сделал. Я освещаю только два типа вибраций, которые придется делать. Более длинный один и два коротких, которые могут переводиться в CLICK и DOUBLE_CLICK:

private void vibrate(int vibrationMessageId) {

    long[] doubleClickPattern = {0, 75, 75, 75};

    if (Build.VERSION.SDK_INT >= 26) {
        Log.d(TAG, "vibrate: SDK 26+ " + Build.VERSION.SDK_INT);

        switch (vibrationMessageId) {
            case Constants.VIBRATION_HEAVY_CLICK:
                ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE));
                break;
            case Constants.VIBRATION_DOUBLE_CLICK:
                ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(VibrationEffect.createWaveform(doubleClickPattern,-1));
                break;
        }


    } else {
        Log.d(TAG, "vibrate: SDK <26 " + Build.VERSION.SDK_INT);

        switch (vibrationMessageId) {
            case Constants.VIBRATION_HEAVY_CLICK:
                ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(200);
                break;
            case Constants.VIBRATION_DOUBLE_CLICK:

                ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(doubleClickPattern,-1);
                break;
        }
    }
}
0 голосов
/ 14 февраля 2020

Это более или менее ч / б совместимость.

2 вещи здесь,

  1. VibrationEffect уже добавлен в API-уровень 26 https://developer.android.com/reference/android/os/VibrationEffect

  2. Вибратор устарел с Api Level 26 и VibrationEffect вступает в игру, как указано выше https://developer.android.com/reference/android/os/Vibrator.html#vibrate (длинный% 5B% 5D,% 20int)

...