1
1
package com .blankj .utilcode .util ;
2
2
3
3
import android .content .Context ;
4
+ import android .media .AudioAttributes ;
5
+ import android .os .Build ;
4
6
import android .os .Vibrator ;
7
+
8
+ import androidx .annotation .RequiresApi ;
5
9
import androidx .annotation .RequiresPermission ;
6
10
7
11
import static android .Manifest .permission .VIBRATE ;
@@ -35,6 +39,39 @@ public static void vibrate(final long milliseconds) {
35
39
vibrator .vibrate (milliseconds );
36
40
}
37
41
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
+
38
75
/**
39
76
* Vibrate.
40
77
* <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) {
49
86
vibrator .vibrate (pattern , repeat );
50
87
}
51
88
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
+
52
124
/**
53
125
* Cancel vibrate.
54
126
* <p>Must hold {@code <uses-permission android:name="android.permission.VIBRATE" />}</p>
@@ -66,4 +138,11 @@ private static Vibrator getVibrator() {
66
138
}
67
139
return vibrator ;
68
140
}
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
+ }
69
148
}
0 commit comments