Cal*_*ron 3 android screen-orientation
我发现代码可以满足我的需求,例如:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Run Code Online (Sandbox Code Playgroud)
但这似乎要求参与活动,而不是服务.
基本上我想要做的是接收ON_BOOT_COMPLETED意图并启动服务,让服务定期检查是否(或最好通知屏幕方向已更改),并将其设置回Landscape.
有没有办法在服务中做到这一点?我一直在寻找答案而一直找不到任何东西,所以如果这是一个重复的问题,我会大声道歉.
注意:这是一个付费的自由职业项目,仅用于支付我工作的人所拥有的设备.它不适用于恶意软件或任何其他此类目的
首先,强制性的"请不要那样做".我希望你有充分理由这样做,因为用户可以通过禁用屏幕旋转来设置此首选项.
也就是说,你不能从服务中做到这一点.正如您所指出的,Activity.setRequestedOrientation(int)属于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);
}
Run Code Online (Sandbox Code Playgroud)
在代码段中,DISPLAY是一个简单的开关,可以显示覆盖窗口以进行测试.(你应该看到一个半透明的红色覆盖层.)
| 归档时间: |
|
| 查看次数: |
1768 次 |
| 最近记录: |