elise-ng/flutter_is_lock_screen
用於檢測裝置是否處於鎖定畫面的 Flutter 外掛程式。對於判斷應用程式進入背景是因為鎖定畫面還是離開應用程式非常有用。
- Stars
- 4
- Forks
- 34
- 最近推送(UTC)
- 2023年3月13日
- 專案狀態
- 未封存
技術主題
使用的依賴
依賴清單 2 項
- flutter
{"sdk":"flutter"} - flutter_test開發依賴
{"sdk":"flutter"}
原始 README
以下為英文專案原文快照,最新內容請造訪 GitHub。
展開 / 收合專案 README
is_lock_screen
Detects if device is locked. Useful for determining whether app entered background due to locking screen or leaving app.
Usage
Import library and call the following method.
Note that this only works on physical device for iOS.
bool? result = await isLockScreen();
You will probably observe the AppLifecycleState with a WidgetsBindingObserver and call this when app is in background:
@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
super.didChangeAppLifecycleState(state);
if (state == AppLifecycleState.inactive) {
print('app inactive, is lock screen: ${await isLockScreen()}');
} else if (state == AppLifecycleState.resumed) {
print('app resumed');
}
}
See example app code for details
Why this plugin?
An alternative to this plugin is hardware_buttons, which uses non-public API (com.apple.springboard.lockcomplete) on iOS to detect lock button usage and violates App Store requirements.
To circumvent this issue, this plugin detects whether iOS device is in lock screen by checking if screen brightness is 0.0 (the user-adjustable minimum is >0.01).
On android, this plugin uses KeyguardManager and PowerManager API to check if device is secured or display is off as suggested in this gist. A similar flow was tested on iOS with LocalAuthentication and UIApplication.shared.isProtectedDataAvailable but failed due to long grace period of the system lock down. The flag always return true the moment screen is locked.