最近我尝试在android wear watchface中实现环境模式,在实现了一些编码后,我发现在进入环境模式(模拟器)时不会调用onAmbientModeChanged,但在切换到普通模式时会调用两次,第一次触发,inAmbientMode为真,第二次触发 inAmbientMode 为假。
private class Engine extends CanvasWatchFaceService.Engine {
...
...
@Override
public void onAmbientModeChanged(boolean inAmbientMode) {
Log.e(TAG, "isInAmbientMode():" + inAmbientMode);
super.onAmbientModeChanged(inAmbientMode);
if (mLowBitAmbient) {
boolean antiAlias = !inAmbientMode;
setPaintAntiAlias(antiAlias);
}
invalidate();
updateTimer();
}
@override
public void onDraw(Canvas canvas, , Rect bounds){
...
for(int i=0;i<node.length;i++){
//drawing canvas
}
}
}
AndroidManifest.xml
<uses-permission android:name="com.google.android.permission.PROVIDE_BACKGROUND" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET"/>
环境开启时不触发会有什么问题?这是一个错误还是我需要添加一些权限或类来触发它?任何帮助,将不胜感激。
编辑:当环境时,表面不会重绘,直到它回到正常模式,然后表面将绘制环境表面然后只绘制正常表面
经过测试和调试,我发现for循环是没有触发onAmbientModeChanged的主要原因,注释掉for循环后,当环境变化时,onAmbientModeChanged也会正确触发但仍然不知道为什么它发生和解决方案。