oboard

oboard

https://oboard.eu.org/
github
email
tg_channel
medium
twitter
bilibili
steam_profiles
follow

Flutter 实现贴耳熄屏

离脸近屏幕就黑了,离得屏幕主亮了
打电话的时候有了它就能避免误触
找不到
可是搜遍了整个 flutter 组织都没有发现相关代码
于是我打算自己动手丰衣足食⬇️

Android#

在 Android 中 API21 之前是需要自己手动写距离传感器和熄屏亮屏的
而到 API21 也就是 Android 5.0 之后,PowerManager 加入了新的常量

PROXIMITY_SCREEN_OFF_WAKE_LOCK

使得这个功能实现起来非常简单

if ((pm.getSupportedWakeLockFlags()
 & PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK) != 0x0) {
    mProximityWakeLock = pm.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, LOG_TAG);
}

iOS#

在 iOS 中,也有相应的方法实现

// 近距离传感器的实现封装在UIKit中

// 需要使用真机测试

import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 系统APP自动开启了近距离检测(如:打电话,离脸近屏幕就黑了,离的远屏幕主亮了)
        // 但开发者APP需要手动开启
        UIDevice.current.isProximityMonitoringEnabled = true
        
        // 使用通知监听距离变化
        NotificationCenter.default.addObserver(self, selector: #selector(proximityStateChanged), name: NSNotification.Name.UIDeviceProximityStateDidChange, object: nil)
    }
    
    @objc private func proximityStateChanged(){
        if UIDevice.current.proximityState == true{ // 近距离
            print("太近了,都贴脸上了")
            // 近距离锁屏,就是让屏幕变黑,省电
            UIApplication.shared.isIdleTimerDisabled = false
        } else{ // 远距离
            print("太远了,都看不见你了")
            // 远距离不锁屏
            UIApplication.shared.isIdleTimerDisabled = true
        }
    }
}

两个平台的实现方法都有了,我们只需要做成 Plugin 就可以集成到自己的项目当中了

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。