Android 在服务中将方向设置为横向模式
我找到了符合我要求的代码,例如:Android 在服务中将方向设置为横向模式,android,screen-orientation,Android,Screen Orientation,我找到了符合我要求的代码,例如: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 但这似乎需要参与一项活动,而不是一项服务 基本上,我想做的是接收ON_BOOT_COMPLETED意图并启动服务,让服务定期检查(或者最好在屏幕方向改变时得到通知),然后将其设置回横向 在服务中是否有这样做的方法?我一整天都在寻找答案,但一直找不到任何答案,所以如果这是一个重复的问题,我深表歉意 注意:这是一个付费的自由职业
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
但这似乎需要参与一项活动,而不是一项服务
基本上,我想做的是接收ON_BOOT_COMPLETED意图并启动服务,让服务定期检查(或者最好在屏幕方向改变时得到通知),然后将其设置回横向
在服务中是否有这样做的方法?我一整天都在寻找答案,但一直找不到任何答案,所以如果这是一个重复的问题,我深表歉意
注意:这是一个付费的自由职业者项目,仅用于支付我工作费用的人拥有的设备上。它不是为了恶意软件或任何其他类似目的首先,强制性的“请不要那样做”。我希望你有一个合理的理由这样做,因为有一个合法的方式为用户设置这个偏好禁用屏幕旋转 也就是说,您不能从服务中执行此操作。正如您所指出的,属于Activity类,不能从任何其他上下文中使用
你可以考虑做的,是创建一个透明的系统覆盖窗口,并执行它对景观的定位。 为了回答您的后续问题,以下是您可以从服务中调用的代码片段:
private static final boolean DISPLAY = false;
@Override
public void onCreate() {
final View view = new View(this);
int dimension = 0;
int pixelFormat = PixelFormat.TRANSLUCENT;
if (DISPLAY) {
view.setBackgroundColor(Color.argb(128, 255, 0, 0));
dimension = LayoutParams.MATCH_PARENT;
pixelFormat = PixelFormat.RGBA_8888;
}
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
dimension, dimension,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
pixelFormat);
params.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
final WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(view, params);
}
在代码段中,
DISPLAY
是一个简单的开关,用于启用覆盖窗口的显示以进行测试。(你应该看到一个半透明的红色覆盖物。)服务与用户界面无关,因此与屏幕方向无关。这是一个付费的自由职业项目,仅在付费给我的人拥有的设备上使用。它不是用于恶意软件或任何其他此类目的。你有关于我如何创建这样一个窗口的来源吗?我已经包括了一个我从中得到的片段。这看起来绝对完美。非常感谢。我把权限搞错了,因为我把窗口类型和系统警报窗口混淆了。您可以删除它。