- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以几个月前我做了一个应用程序来帮助我改善 sleep 。我有 sleep 问题,这听起来很奇怪,但是当我上床 sleep 时,我会使用该应用程序振动手机,让自己专注于休眠,这目前是我 sleep 程序的一个重要方面。
但是,我昨天将手机更新到了 Android 10,它完全破坏了该应用程序。以前,当我单击开始按钮时应用程序会振动,即使在我使用后台服务、广播接收器和唤醒锁锁定手机后,应用程序也会继续振动。但是现在,在我锁定手机后应用程序停止振动,并且控制台中没有任何内容说明它为什么这样做。
如果有人可以就我可以在代码中更改的内容或其他内容提供建议,我将不胜感激,因为我完全不知道该怎么做,我必须以某种方式让它工作。
这是代码:
MainActivity 中处理服务振动开始的函数:
// Event for when the VIBRATE button is pressed
public void beginVibration(View view) {
// Given either of the bars are not 0
if (durationBar.getProgress() != 0 || delayBar.getProgress() != 0) {
// Get the values for each bar and set them accordingly in the vibration value array
long[] pattern = {0, durationBar.getProgress(), delayBar.getProgress()};
// Setup the ServiceConnection to monitor the Vibrate service
c = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
m_service = ((Vibrate.MyBinder)service).getService();
}
@Override
public void onServiceDisconnected(ComponentName name) {
m_service = null;
}
};
// Bind the service to the connection
bindService(i, c, BIND_AUTO_CREATE);
// Insert the pattern into the intent itself
i.putExtra("pattern", pattern);
// Start the vibrate service
this.startService(i);
}
}
public class Vibrate extends Service {
// Vibration object
private Vibrator v;
/*
THESE THREE ARE FOR PREVENTING THE VIBRATION FROM STOPPING AFTER THE PHONE IS PUT TO SLEEP
*/
// Wake Lock object
private PowerManager.WakeLock wl;
// Manager for the notifications
private NotificationManagerCompat m_notificationManager;
// BroadcastReceiver object
public BroadcastReceiver re;
public AudioAttributes audioAttributes;
// Not gonna lie, Idk what this does just know it is part of the binding process within MainActivity
public class MyBinder extends Binder {
public Vibrate getService() {
return Vibrate.this;
}
}
@Override
public void onCreate() {
super.onCreate();
// Acquire the Wake Lock
PowerManager pw = (PowerManager) getSystemService(POWER_SERVICE);
wl = pw.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WL:");
wl.acquire();
// Get the vibration service
v = (Vibrator) getSystemService(VIBRATOR_SERVICE);
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_ALARM)
.build();
}
@Override
public int onStartCommand(Intent i, int flags, int startId) {
// Ensure that an intent with a long array has been passed
if (i != null && i.getExtras() != null) {
// Get the array
final long[] pattern = i.getExtras().getLongArray("pattern");
// Begin the vibration
v.vibrate(pattern, 0);
// Intialize the BroadcastReceiver and set it to trigger when the screen is turned off,
// thus triggering the vibrations
re = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
Log.i("VIZZY: ", "VIBRATION STARTED");
v.vibrate(pattern, 0, audioAttributes);
Log.i("VIZZY: ", "VIBRATION BEGUn");
}
}
};
// Add a listener for when the screen turns off and register the receiver
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
registerReceiver(re, filter);
}
return Service.START_STICKY;
}
@Override
public void onDestroy() {
// If the phone was put to sleep, cancel the notification keeping the vibration going
if (m_notificationManager != null) {
m_notificationManager.cancel(001);
}
// Release the Wake Lock, unregister the BroadcastReceiver, and stop the vibrations
wl.release();
unregisterReceiver(re);
v.cancel();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
private void addNotification() {
// create the notification
Notification.Builder m_notificationBuilder = new Notification.Builder(this)
.setContentTitle("VIZZY")
.setContentText("VIBRATING")
.setSmallIcon(R.mipmap.ic_launcher);
// create the pending intent and add to the notification
Intent intent = new Intent(this, Vibrate.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
m_notificationBuilder.setContentIntent(pendingIntent);
m_notificationManager = NotificationManagerCompat.from(this);
// send the notification
m_notificationManager.notify(001, m_notificationBuilder.build());
}
最佳答案
我遇到了同样的问题。我发现从目标 29 开始,振动将在后台工作,只有将正确的音频属性传递给方法:public void vibrate(VibrationEffect vibe, AudioAttributes attributes);
您可以尝试以这种方式使用它:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
vibrator.vibrate(VibrationEffect.createWaveform(pattern, 0),
new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_ALARM)
.build());
} else {
vibrator.vibrate(pattern, 0);
}
关于Android 10、API 29 更新后,Android 振动应用程序不再工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60466695/
在我的应用中,一些 View 对 onLongClick 使用react。在其他情况下,我想实现相同的功能,但我想知道 View 的哪一部分被长按——所以我用 onTouchEvent 模拟它。长按的
我正在尝试使用声音管理器应用程序为“铃声、通知、媒体、系统”创建不同的声音配置文件。 根据设置音量级别,我通过使用 成功了 AudioManager setStreamVolume(AudioMana
有没有办法以编程方式禁用 iPhone 的振动? 我能找到的只是如何启用振动。基本上我想通过 UISwitch 切换振动模式。 如果有办法的话,有人可以帮我吗? 最佳答案 据我所知你不能这样做。因为苹
好像无法播放提示音 AudioServicesPlayAlertSound(kSystemSoundID_Vibrate); 当 AudioQueue 用于录制音频时。那是对的吗?也许我做错了什么。除
我正在尝试振动/摇动一个 UI 元素,即一个控件,就好像它被敲击一样,并且正在共振。我可以使用核心动画将其垂直、水平或同时摇动一个像素: CABasicAnimation* rotationXAnim
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: Making the iPhone vibrate 如何以编程方式使 iPhone 振动? 任何想法或教程链接表示赞
以下代码无法运行... function onPageLoad(){ navigator.vibrate([500]);} 在移动设备上测试它,当我附加到按钮时它可以工作但不能加载??? 最佳
我正在我的应用程序中构建一个锻炼计时器。工作流程是: 用户点击“启动计时器”按钮 计时器倒计时 90 秒秒 计时器在 90 秒后结束并触发 PlayAlertSound振动 这仅在应用程序打开时有效,
您好,我已经创建了一个任务提醒应用程序。例如,您选择某个时间提醒某项任务,当该时间到来时,状态栏上会出现通知。 但是我想实现一个振动功能,可能还有一个带有通知的 LED 灯功能,但我不知道从哪里开始?
我正在开发一个应用程序,该应用程序会在计时器耗尽时发送本地通知。我已经把那部分全部设置好了。三十秒标记有通知,然后从十秒到一秒。当十比一的情况发生时,所有通知都会混在一起,变得有点困惑。现在我只剩下十
我正在使用 firebase 向我的应用程序(iOS 和 Android)发送通知。我不喜欢使用 data 字段来发送我的通知,因为对于 iOS,当用户强制退出应用程序时,不会调用 didReceiv
直到今天,我一直在模拟器中测试我的应用程序。我第一次在真实的 iPhone 上测试了一个项目。令我感到不快的是,每次我按下按钮时手机都会振动。这没什么大不了的,只是我的特定应用程序有一个内置键盘,每次
我有 slider 和一些输出框来显示这些 slider 的值。当用户移动 slider 并且值发生变化时,页面的其余部分会移动/抖动以适应新的(非常轻微的)值大小的增加。防止这种情况的最佳方法是什么
非常基本的问题,几个小时以来我一直试图自己弄清楚,但无法解决。 所以我正在为 Pebble 创建我的第一个表盘,我希望 watch 每小时发出嗡嗡声(振动)。您还记得一些数字 watch 会在点钟时间
我在收到通知时听不到声音、振动或灯光。有人可以告诉我我缺少什么吗? 还有一些问题: 1.) 我只在应用程序打开时得到指定的图标。当应用程序关闭时,我会看到 android Logo 图标(我想那是因为
我正在使用此代码购买音频线的编译错误。有谁知道为什么吗? - (void)handleTimer:(NSTimer *)timer { self.counter--; self.tim
我一直在尝试使用这段代码让 iPhone 振动: AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 但是没有用,会不会是我在调用这个的同时播放
我查看了 http://caniuse.com/但找不到任何关于振动 API 兼容性的信息。 哪些浏览器支持它? 最佳答案 更新 [2014-03-07]:Firefox、Chrome 和 Opera
iPhone如何设置振动一次? 例如,当玩家失去生命或游戏结束时,iPhone 应该振动。 最佳答案 来自“iPhone Tutorial: Better way to check capabilit
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 这行代码在 iPad 上似乎不起作用 - iPad 是否具有振动所需的硬件? 最佳答案 它没
我是一名优秀的程序员,十分优秀!