Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Android上以编程方式禁用屏幕开/关磁传感器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
一些着名的Nexus系列 Android设备有一个磁性传感器,而不是android.hardware.Sensor.TYPE_MAGNETIC_FIELD专门用于使用内置小磁铁的手机壳自动打开/@L_450_3@屏幕.

在我的应用程序中,我正在使用android.hardware.Sensor.TYPE_MAGNETIC_FIELD和SensoRMANager进行磁体检测,以检测用户是否在内部有磁铁的情况下触摸手机.

代码工作没有问题,问题是在这些设备上非常容易意外触发屏幕ON / OFF传感器,@L_450_3@屏幕.

我试过了

> android上的android:keepScreenOn =“true”
>使用权限android.permission.WAKE_LOCK并通过PoweRMANager获取唤醒锁定.

两者都没有成功.

我的活动恢复时有没有办法暂时禁用这个传感器?

解决方法

由于霍尔效应传感器的动作与按下电源按钮相同,因此清单中的keepScreenOn = true也不起作用.

在这里,我提供了一个我已经测试过的解决方法.在这方法中,无论霍尔效应传感器锁定设备和转动显示器,都可以显示您的活动.

在开始解锁操作之前

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意图.为此,添加一个广播接收器,用于侦听系统广播的此意图.您需要在本注册接收器. (stackoverflow.com/a/9478013/9640177)
在清单中

<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();
  }
}

内部活动

// 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
这将打开显示屏.

在您的活动完成工作后不要忘记删除这些标记,并且不需要在最前面.

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);

这将使您的窗口从锁定屏幕消失并使应用程序正常运行.

希望这可以帮助.

大佬总结

以上是大佬教程为你收集整理的在Android上以编程方式禁用屏幕开/关磁传感器全部内容,希望文章能够帮你解决在Android上以编程方式禁用屏幕开/关磁传感器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。