最近、Android Wear ウォッチフェイスにアンビエント モードを実装しようとしましたが、いくつかのコーディングを実装した後、アンビエント モード (エミュレータ) に切り替えたときに onAmbientModeChanged が呼び出されないことがわかりましたが、通常モードにすると、最初のトリガー、inAmbientMode が 2 回呼び出されます。 2 番目のトリガー inAmbientMode は false です。
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"/>
アンビエントがオンのときにトリガーされない問題は何ですか? それはバグですか、それともこれをトリガーするためにいくつかの権限またはクラスを追加する必要がありますか? どんな助けでも大歓迎です。
EDIT:アンビエントの場合、ウォッチフェイスは通常モードに戻るまで再描画されません。その後、ウォッチフェイスはアンビエントウォッチフェイスを描画してから、通常のウォッチフェイスのみを描画します
何かのテストとデバッグを行った後、for ループが onAmbientModeChanged をトリガーしなかった主な原因であることがわかりました。for ループをコメントアウトした後、アンビエントの変更時に onAmbientModeChanged も正しくトリガーされますが、理由はまだわかりません。それが起こり、解決します。