- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
一些著名的 Nexus 系列 Android 设备有一个磁传感器,它不是 android.hardware.Sensor.TYPE_MAGNETIC_FIELD
专门用于使用带有小磁铁的手机壳自动打开/关闭屏幕在他们里面。
在我的应用程序中,我使用 android.hardware.Sensor.TYPE_MAGNETIC_FIELD
和 SensorManager
进行磁铁检测,以检测用户在带有一些磁铁的情况下触摸手机里面。
代码运行没有问题,问题是在这些设备上非常容易意外触发屏幕开/关传感器,从而关闭屏幕。
我试过:
android:keepScreenOn="true"
在 XML 上android.permission.WAKE_LOCK
并通过 PowerManager
获取唤醒锁。都没有成功。
有没有办法在我恢复 Activity 时暂时禁用此传感器?
最佳答案
list 中的 keepScreenOn = true 在这里也不起作用,因为霍尔效应传感器的 Action 与按下电源按钮相同。
在这里,我提供了一个我已经测试过的解决方法。在这种方法中,无论霍尔效应传感器锁定设备和显示器转动如何,您都可以显示您的 Activity 。
在开始解锁 Action 之前
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
以上代码的学分 - https://stackoverflow.com/a/45951927/9640177
还要确保添加权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
设置这些标志将确保您的窗口在锁定屏幕上方可见。
现在,监听 ACTION_SCREEN_OFF Intent 。为此,添加一个广播接收器来监听系统广播的此 Intent 。您需要在本地注册接收器。 (stackoverflow.com/a/9478013/9640177)在 list 中
<receiver android:name=".receiver">
<intent-filter>
<action android:name="android.intent.action.SCREEN_OFF"/>
</intent-filter>
</receiver>
接收类
public class receiver extends BroadcastReceiver {
MyActivity activity;
receiver(MyActivity activity){
this.activity = activity;
}
@Override
public void onReceive(final Context context, Intent intent) {
activity.turnOnScreen();
}
}
内部 Activity
// register receiver
...
IntentFilter screenStateFilter = new IntentFilter();
screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
receiver r = new receiver(MyActivity.this);
registerReceiver(r, screenStateFilter);
...
// function to turn on display
public void turnOnScreen(){
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "my:Tag");
wakeLock.acquire();
wakeLock.release();
}
信用 - https://stackoverflow.com/a/44706632/9640177这将打开显示屏。
不要忘记在您的 Activity 完成工作并且不需要排在最前面之后删除这些标志。
getWindow().removeFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
这将使您的窗口从锁定屏幕上消失并使应用程序正常运行。
希望这对您有所帮助。
关于java - 以编程方式禁用 Android 上的屏幕开/关磁传感器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43206734/
如何使用 ToggleButton 启用/禁用推送通知 示例: ToggleButton 禁用 (OFF) >>> 推送通知应该停止 ToggleButton 启用 (ON) >>> 推送通知 Sho
我有一个 div,它通过简单的转换将自身转换为: div{ transform: translate3d(0, -100%, 0); transition: all .5s; } div.ac
我尝试为静音/取消静音按钮创建一个开/关按钮: override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
我正在手动设置 Jest 。 我的 repo 结构: my-proj - src - components ... - accordion - index.jsx - t
我有一个这样的测试失败了,因为没有调用模拟,问题是模拟被调用但在测试完成之前。 test('should submit if proper values', () => { const spy =
目前我正在使用标准的 testRegex 逻辑来运行我的测试 "jest": { "moduleFileExtensions": [ "ts", "js"
目前我有这个测试: import toHoursMinutes from '../../../app/utils/toHoursMinutes'; describe('app.utils.toHour
使用Chai,您可以创建一个 spy 对象,如下所示: chai.spy.object([ 'push', 'pop' ]); 使用 Jasmine ,您可以使用: jasmine.createSpy
我正在编写一个 Jest 测试,其中我调用一个函数并期望返回一个对象,如下所示: const repository = container => { const makeBooking = (us
当我单独运行每个测试时,它们都成功了。但是当我通过 npm test 一起运行它们时第二个测试失败: Expected number of calls: 2 Received number of ca
我们最近将两个不同的 repos 迁移到一个 monorepo 中。每个都使用 jest 和自己的自定义配置,在他们自己的 package.json 文件中定义。 我想使用 --projects标志以
我试图模拟属性(property) tz和一个使用 jest 的函数,但我不知道将这两个东西一起模拟: 如果运行类似: jest.mock('moment-timezone', () => () =>
我正在尝试设置 Jest 来测试我的应用程序的发展。我收到以下错误: SyntaxError: Unexpected identifier > 1 | const screenSize = requi
我将 Jest 与 React-Native 结合使用,并且偶然发现了一个问题。 App.js 组件中的一小段代码导致 50:50 分支覆盖率: const storeMiddleware = __D
我在下面创建了一个 Jest 测试文件。但是没有创建该文件的快照。我的代码有什么问题? import React from 'react'; import Carousel from './compo
我正在尝试弄清楚如何更新单个快照文件。在文档中,它说只需添加 -t 并且我假设文件名,但这对我不起作用。 例如,在我使用的终端中。 jest -u -t test/js/tests/component
我是 JEST 新手,目前正在测试一个 Javascript 组件,该组件在其 onComponentDidMount 中进行 API 调用。根据 ajax 调用(api 调用)的返回数据,我的组件显
我正在尝试开玩笑地为我的 Web 组件项目编写测试。我已经在 es2015 预设中使用了 babel。我在加载 js 文件时遇到问题。我遵循了一段代码,其中 document对象有一个 current
我刚刚开始使用 jest,但有些事情我不太清楚。 例如,为什么要测试此功能: const liElement = object => `${object.title}`; 与: expect(liEl
我正在编写需要定义 window.location.href 的单元测试第一个单元测试创建如下 describe('myMethod()', () => { beforeEach(()
我是一名优秀的程序员,十分优秀!