Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在服务中将方向设置为横向模式_Android_Screen Orientation - Fatal编程技术网

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
是一个简单的开关,用于启用覆盖窗口的显示以进行测试。(你应该看到一个半透明的红色覆盖物。)

服务与用户界面无关,因此与屏幕方向无关。这是一个付费的自由职业项目,仅在付费给我的人拥有的设备上使用。它不是用于恶意软件或任何其他此类目的。你有关于我如何创建这样一个窗口的来源吗?我已经包括了一个我从中得到的片段。这看起来绝对完美。非常感谢。我把权限搞错了,因为我把窗口类型和系统警报窗口混淆了。您可以删除它。