oboard

oboard

https://www.oboard.fun/
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  
        }  
    }  
}  

両プラットフォームの実装方法が揃ったので、プラグインとして作成すれば自分のプロジェクトに統合できる。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。