Skip to content

Commit 7b4caf9

Browse files
authored
Merge pull request #1805 from simplepeng/master
Fix VibrateUtils can not vibrate in background
2 parents 51c8124 + c7ebceb commit 7b4caf9

File tree

4 files changed

+102
-3
lines changed

4 files changed

+102
-3
lines changed

buildSrc/src/main/groovy/Config.groovy

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class Config {
3434
lib_base : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/base"),
3535
lib_common : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/common"),
3636
lib_subutil : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/subutil"),
37-
lib_utilcode : new ModuleConfig(isApply: true , useLocal: false, localPath: "./lib/utilcode", remotePath: "com.blankj:utilcodex:$Config.versionName"),
37+
lib_utilcode : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/utilcode", remotePath: "com.blankj:utilcodex:$Config.versionName"),
3838
lib_utildebug : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/utildebug"),
3939
lib_utildebug_no_op : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/utildebug-no-op"),
4040
/*Don't delete this line*/

feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt

+21-2
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,35 @@ class VibrateActivity : CommonActivity() {
3232

3333
override fun bindItems(): MutableList<CommonItem<*>> {
3434
return CollectionUtils.newArrayList(
35-
CommonItemClick(R.string.vibrate_1000ms) { VibrateUtils.vibrate(1000) },
35+
CommonItemClick(R.string.vibrate_1000ms) {
36+
VibrateUtils.vibrate(1000)
37+
},
3638
CommonItemClick(R.string.vibrate_custom) {
3739
VibrateUtils.vibrate(longArrayOf(0, 1000, 1000, 2000, 2000, 1000), 1)
3840
},
39-
CommonItemClick(R.string.vibrate_cancel) { VibrateUtils.cancel() }
41+
CommonItemClick(R.string.vibrate_background) {
42+
backHome()
43+
mContentView.postDelayed({
44+
// VibrateUtils.vibrate(1000) -- can not vibrate in background
45+
VibrateUtils.vibrateCompat(longArrayOf(0, 1000, 1000, 2000, 2000, 1000), 1)
46+
// VibrateUtils.vibrateCompat(1000)
47+
}, 1000)
48+
},
49+
CommonItemClick(R.string.vibrate_cancel) {
50+
VibrateUtils.cancel()
51+
}
4052
)
4153
}
4254

4355
override fun onDestroy() {
4456
super.onDestroy()
4557
VibrateUtils.cancel()
4658
}
59+
60+
private fun backHome() {
61+
val intent = Intent(Intent.ACTION_MAIN).apply {
62+
addCategory(Intent.CATEGORY_HOME)
63+
}
64+
startActivity(intent)
65+
}
4766
}

feature/utilcode/pkg/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -366,5 +366,6 @@
366366
<!--Vibrate 相关-->
367367
<string name="vibrate_1000ms">Vibrate 1000ms</string>
368368
<string name="vibrate_custom">Vibrate Custom</string>
369+
<string name="vibrate_background">Vibrate Background</string>
369370
<string name="vibrate_cancel">Cancel</string>
370371
</resources>

lib/utilcode/src/main/java/com/blankj/utilcode/util/VibrateUtils.java

+79
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package com.blankj.utilcode.util;
22

33
import android.content.Context;
4+
import android.media.AudioAttributes;
5+
import android.os.Build;
46
import android.os.Vibrator;
7+
8+
import androidx.annotation.RequiresApi;
59
import androidx.annotation.RequiresPermission;
610

711
import 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

Comments
 (0)