如何基于接近传感器关闭屏幕?
How to turn screen off based on proximity sensor?
最初的想法是重新创建基本的 phone 行为,即当您靠近 phone 时关闭屏幕并在您远离时重新打开它。
我花了很多时间试图回答这个问题,但没有找到任何简单的解决方案,我相信在这里回答可能会对某些人有所帮助。我不会展示如何处理调用状态,因为此解决方案允许您在需要时 enable/disable 行为。
示例项目可以在 GitHub
上找到
首先你需要在AndroidManifest.xml声明你正在使用Wakelock :
<uses-permission android:name="android.permission.WAKE_LOCK" />
然后在您的 activity 中导入 PowerManager
import android.os.PowerManager
声明你的属性
private lateinit var powerManager: PowerManager
private lateinit var lock: PowerManager.WakeLock
在 onCreate 方法中实例化它们:
(用另一个独特的标签替换“simplewakelock:wakelocktag”)
powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
lock = powerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK,"simplewakelock:wakelocktag")
然后你可以启用和禁用锁定(和行为)使用:
// Enable : Acquire the lock if it was not already acquired
if(!lock.isHeld) lock.acquire()
// Disable : Release the lock if it was not already released
if(lock.isHeld) lock.release()
放在你想放的地方就行了,不用的时候不要忘记释放锁(onPause是个好地方),否则即使你切换app也会继续。
最初的想法是重新创建基本的 phone 行为,即当您靠近 phone 时关闭屏幕并在您远离时重新打开它。
我花了很多时间试图回答这个问题,但没有找到任何简单的解决方案,我相信在这里回答可能会对某些人有所帮助。我不会展示如何处理调用状态,因为此解决方案允许您在需要时 enable/disable 行为。
示例项目可以在 GitHub
上找到首先你需要在AndroidManifest.xml声明你正在使用Wakelock :
<uses-permission android:name="android.permission.WAKE_LOCK" />
然后在您的 activity 中导入 PowerManager
import android.os.PowerManager
声明你的属性
private lateinit var powerManager: PowerManager
private lateinit var lock: PowerManager.WakeLock
在 onCreate 方法中实例化它们: (用另一个独特的标签替换“simplewakelock:wakelocktag”)
powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
lock = powerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK,"simplewakelock:wakelocktag")
然后你可以启用和禁用锁定(和行为)使用:
// Enable : Acquire the lock if it was not already acquired
if(!lock.isHeld) lock.acquire()
// Disable : Release the lock if it was not already released
if(lock.isHeld) lock.release()
放在你想放的地方就行了,不用的时候不要忘记释放锁(onPause是个好地方),否则即使你切换app也会继续。