11package com .blankj .utilcode .util ;
22
33import android .content .Context ;
4+ import android .media .AudioAttributes ;
5+ import android .os .Build ;
46import android .os .Vibrator ;
7+
8+ import androidx .annotation .RequiresApi ;
59import androidx .annotation .RequiresPermission ;
610
711import static android .Manifest .permission .VIBRATE ;
@@ -35,6 +39,39 @@ public static void vibrate(final long milliseconds) {
3539 vibrator .vibrate (milliseconds );
3640 }
3741
42+ /**
43+ * Vibrate.
44+ * <p>Must hold {@code <uses-permission android:name="android.permission.VIBRATE" />}</p>
45+ *
46+ * @param milliseconds The number of milliseconds to vibrate.
47+ * @param attributes {@link AudioAttributes} corresponding to the vibration. For example,
48+ * specify {@link AudioAttributes#USAGE_ALARM} for alarm vibrations or
49+ * {@link AudioAttributes#USAGE_NOTIFICATION_RINGTONE} for
50+ * vibrations associated with incoming calls.
51+ */
52+ @ RequiresApi (api = Build .VERSION_CODES .LOLLIPOP )
53+ @ RequiresPermission (VIBRATE )
54+ public static void vibrate (final long milliseconds , AudioAttributes attributes ) {
55+ Vibrator vibrator = getVibrator ();
56+ if (vibrator == null ) return ;
57+ vibrator .vibrate (milliseconds , attributes );
58+ }
59+
60+ /**
61+ * VibrateCompat - Can vibrate in background
62+ * <p>Must hold {@code <uses-permission android:name="android.permission.VIBRATE" />}</p>
63+ *
64+ * @param milliseconds he number of milliseconds to vibrate.
65+ */
66+ @ RequiresPermission (VIBRATE )
67+ public static void vibrateCompat (final long milliseconds ) {
68+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .LOLLIPOP ) {
69+ vibrate (milliseconds , getAudioAttributes ());
70+ } else {
71+ vibrate (milliseconds );
72+ }
73+ }
74+
3875 /**
3976 * Vibrate.
4077 * <p>Must hold {@code <uses-permission android:name="android.permission.VIBRATE" />}</p>
@@ -49,6 +86,41 @@ public static void vibrate(final long[] pattern, final int repeat) {
4986 vibrator .vibrate (pattern , repeat );
5087 }
5188
89+ /**
90+ * Vibrate.
91+ * <p>Must hold {@code <uses-permission android:name="android.permission.VIBRATE" />}</p>
92+ *
93+ * @param pattern An array of longs of times for which to turn the vibrator on or off.
94+ * @param repeat The index into pattern at which to repeat, or -1 if you don't want to repeat.
95+ * @param attributes {@link AudioAttributes} corresponding to the vibration. For example,
96+ * specify {@link AudioAttributes#USAGE_ALARM} for alarm vibrations or
97+ * {@link AudioAttributes#USAGE_NOTIFICATION_RINGTONE} for
98+ * vibrations associated with incoming calls.
99+ */
100+ @ RequiresApi (api = Build .VERSION_CODES .LOLLIPOP )
101+ @ RequiresPermission (VIBRATE )
102+ public static void vibrate (final long [] pattern , final int repeat , AudioAttributes attributes ) {
103+ Vibrator vibrator = getVibrator ();
104+ if (vibrator == null ) return ;
105+ vibrator .vibrate (pattern , repeat , attributes );
106+ }
107+
108+ /**
109+ * VibrateCompat - Can vibrate in background
110+ * <p>Must hold {@code <uses-permission android:name="android.permission.VIBRATE" />}</p>
111+ *
112+ * @param pattern An array of longs of times for which to turn the vibrator on or off.
113+ * @param repeat The index into pattern at which to repeat, or -1 if you don't want to repeat.
114+ */
115+ @ RequiresPermission (VIBRATE )
116+ public static void vibrateCompat (final long [] pattern , final int repeat ) {
117+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .LOLLIPOP ) {
118+ vibrate (pattern , repeat , getAudioAttributes ());
119+ } else {
120+ vibrate (pattern , repeat );
121+ }
122+ }
123+
52124 /**
53125 * Cancel vibrate.
54126 * <p>Must hold {@code <uses-permission android:name="android.permission.VIBRATE" />}</p>
@@ -66,4 +138,11 @@ private static Vibrator getVibrator() {
66138 }
67139 return vibrator ;
68140 }
141+
142+ @ RequiresApi (api = Build .VERSION_CODES .LOLLIPOP )
143+ private static AudioAttributes getAudioAttributes () {
144+ return new AudioAttributes .Builder ()
145+ .setUsage (AudioAttributes .USAGE_ALARM )
146+ .build ();
147+ }
69148}
0 commit comments