我正在尝试让手表在不定期的特定时刻振动。
当手表屏幕打开时,我可以这样做,但当手表屏幕变暗时,它就不工作了。
我在这里和WakeLocks上的安卓开发者页面上读到了一些问题,我想这就是我需要的……然而,它对我不起作用。下面是我的代码,我做错了什么吗?
首先,在我的清单文件中,我有:
<uses-permission android:name="android.permission.WAKE_LOCK" />下面是我的部分代码:
PowerManager.WakeLock wakeLock;
@Override
public void onCreate(SurfaceHolder holder) {
super.onCreate(holder);
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG);
}
private void vibrate(int duration) {
wakeLock.acquire();
Vibrator v = (Vibrator) getBaseContext().getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(duration);
wakeLock.release();
}屏幕打不开手表也不会震动。我做错了什么?
谢谢!
发布于 2016-08-04 01:16:03
如果你的手表在收到通知时没有震动,或者你根本看不到通知,那么在每一步之后检查你的手表,看看通知是否开始工作。尝试执行以下troubleshooting步骤:
>H116检查这些应用是否为最新:谷歌Play服务、谷歌、安卓穿戴。<代码>H217<代码>F218
尝试使用标志FLAG_KEEP_SCREEN_ON唤醒设备。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}这种方法的优点是,与唤醒锁不同,它不需要特殊权限,并且平台可以正确地管理用户在应用程序之间的移动,而无需担心应用程序释放未使用的资源。
另一种实现方法是在应用程序的布局XML文件中使用android:keepScreenOn属性:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true">
...
</RelativeLayout>使用FLAG_KEEP_SCREEN_ON.与使用android:keepScreenOn="true"等效您可以使用任何最适合您的应用程序的方法。
发布于 2016-08-10 11:06:21
只要你想让手表保持交互状态(振动才能继续--你必须处于交互状态才能振动),你就需要保持获得唤醒锁的时间,但你似乎在获得唤醒锁后立即释放了唤醒锁。
获取唤醒锁可能有风险,因此,如果您正在从手表表面服务运行该代码(从代码片段中未清除),请在获取唤醒锁时启动一个透明的活动,并在该活动终止时释放它--这样,您就可以使用活动生命周期作为停止振动和释放唤醒锁的方法。这是我在ustwo Timer Watch Faces中实现的(当计时器到期时,手表表面开始在交互模式下闪烁和振动),它工作得很好。
此外,请记住,要使振动工作,您需要在清单中声明振动权限:
<uses-permission android:name="android.permission.VIBRATE" />https://stackoverflow.com/questions/38728648
复制相似问题