Gal*_*alL 7 java android android-studio
编辑感谢YP D 的回答,我有一个解决方案。在最后添加
自从将我的 Pixel 3 更新到 android 版本 10 (API 29) 后,我的应用程序的振动就不起作用了。
我的应用程序请求振动权限,并且在早期(< API 29)版本上有振动。权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
Run Code Online (Sandbox Code Playgroud)
将手机连接到 Android Studio 并查看 logcat 时,我注意到以下错误:
2019-09-11 18:46:28.622 1474-1546/? E/NotificationService: Suppressing notification from package by user request.
2019-09-11 18:46:28.816 1474-3294/? E/VibratorService: Ignoring incoming vibration as process with uid = 10284 is background, usage = USAGE_UNKNOWN
Run Code Online (Sandbox Code Playgroud)
我的振动代码(durationMs 是 50,但我也用 500 测试过):
Vibrator v = (Vibrator) context.getSystemService(VIBRATOR_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
v.vibrate(VibrationEffect.createOneShot(durationMs, VibrationEffect.DEFAULT_AMPLITUDE));
} else {
v.vibrate(durationMs);
}
Run Code Online (Sandbox Code Playgroud)
我通过 AppWidgetProvider 类运行此代码,该类使用 Handler.postDelayed() 线程来做一些工作。
我在网上没有找到与此问题相关的任何内容。我认为自 API 29 以来,VibratorService 存在后台应用程序问题。
如果是这种情况,我不确定我应该采取什么方法将振动带到前台。
我曾考虑使用 Service 进行后台工作,但我发现在 Handler 线程上工作更容易,因此我可以在完成计算后轻松找到我的 Widget 视图,并希望更新屏幕上的文本。
这是基于 YP D 回答的解决方案:
Vibrator v = (Vibrator) context.getSystemService(VIBRATOR_SERVICE);
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_ALARM)
.build();
VibrationEffect ve = VibrationEffect.createOneShot(durationMs,
VibrationEffect.DEFAULT_AMPLITUDE);
v.vibrate(ve, audioAttributes);
Run Code Online (Sandbox Code Playgroud)
AudioAttributes 似乎解决了振动问题。
小智 5
我也遇到了同样的问题,可以使用以下方法解决
像这样
Vibrator mVibrator = (Vibrator) App.getInstance().getSystemService(Context.VIBRATOR_SERVICE);
long[] pattern = {100, 1000, 100, 1000};
if (mVibrator != null) {
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_ALARM) //key
.build();
mVibrator.vibrate(pattern, 2, audioAttributes);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1232 次 |
| 最近记录: |