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
        }
    }
}

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

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