Android Wear onEnterAmbient()未在部分设备触发的原因排查
Wear OS环境模式
onEnterAmbient()触发异常排查 Android官方文档指出:
当Activity切换到环境模式时,系统会调用环境回调的onEnterAmbient()方法
但实际开发中发现该情况并非在所有设备上都成立。
以下代码在Android Studio模拟器和Fossil Gen 6手表(Wear OS 3)上运行完全正常:
class MainActivity : FragmentActivity(), AmbientCallbackProvider { private lateinit var binding: ActivityMainBinding private lateinit var ambientController: AmbientModeSupport.AmbientController private var systemOneSecondTick: Timer = Timer() private var bottomKeyCode = KeyEvent.KEYCODE_STEM_1 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) ambientController = AmbientModeSupport.attach(this) // Samsung assigns different button codes if (Build.MODEL == "SM-R870") { bottomKeyCode = KeyEvent.KEYCODE_BACK } systemOneSecondTick.scheduleAtFixedRate(timerTask { runOnUiThread { binding.middleLineTextView.text = SimpleDateFormat("HH:mm:ss", Locale.UK).format(System.currentTimeMillis()) } }, 0, 1000) } override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { return if (keyCode == bottomKeyCode) { true // indicates key press has been handled } else { super.onKeyDown(keyCode, event) } } override fun getAmbientCallback() = object : AmbientModeSupport.AmbientCallback() { override fun onEnterAmbient(ambientDetails: Bundle?) { // This is not called on all devices super.onEnterAmbient(ambientDetails) binding.middleLineTextView.setTextColor(Color.rgb(150,150,150)) Log.d(TAG, "onEnterAmbient()") } override fun onExitAmbient() { // This is called !!!! super.onExitAmbient() binding.middleLineTextView.setTextColor(Color.rgb(255,255,255)) Log.d(TAG, "onExitAmbient()") } } companion object { const val TAG = "WearAmbientMode" } }
该示例仅尝试调暗显示时间的颜色(为简化未减慢时钟更新频率)。在模拟器和Fossil手表上,遮挡表盘会触发onEnterAmbient(),显示调暗的时间;按下底部按键会触发onExitAmbient(),恢复全屏亮度。
但在**Samsung Galaxy Watch 4(Wear OS 3)或TicWatch Pro 3(Wear OS 2)**上运行时,遮挡表盘会导致屏幕关闭,日志显示onEnterAmbient()未被调用;按下底部按键时onExitAmbient()会被调用(Galaxy Watch上该情况并非始终出现,可能为另一问题)。
已尝试修改Galaxy Watch 4的常亮显示设置,但onEnterAmbient()仍未触发。
恳请各位帮忙分析为何代码在模拟器和Fossil手表上正常工作,却在Galaxy Watch 4上出现该问题?
内容的提问来源于stack exchange,提问作者RatherBeSailing
相关产品推荐
相关产品推荐

