【问题标题】:How to lock android screen during screen mirroring?如何在屏幕镜像期间锁定Android屏幕?
【发布时间】:2020-03-10 02:53:32
【问题描述】:

我正在开发一个 android 应用程序,用于将 android 屏幕镜像到车载显示器。我使用 MediaProjection 来获取屏幕;使用该 api 我能够镜像屏幕,现在我想在镜像期间锁定 android 屏幕以避免分散用户的注意力。

有没有办法在流式传输期间锁定 Android 设备屏幕?例如显示固定图片或冻结设备屏幕并流式传输其他布局?也许使用一些 API 等?

【问题讨论】:

  • 欢迎来到 SO!一个问题应该有最少的内容:输入样本(如果需要)、预期输出样本(需要)、你尝试了什么、你研究了什么……你尝试了什么?

标签: android lockscreen mirroring android-screen android-mediaprojection


【解决方案1】:

我个人通过设置/清除标志来为用户锁定/解锁 UI:

//The user cannot interact with the UI
private void disableUserInteraction() {
    (getActivity()).getWindow()
            .setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                    WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}

//The user can interact with the UI
private void enableUserInteraction() {
    (getActivity()).getWindow()
            .clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}

这将阻止用户与屏幕进行交互。 然后,您可以创建一个带有灰色的 RelativeLayout,以使用户明显需要等待,并在执行您的操作时使用它的可见性:

<LinearLayout
    android:id="@+id/loading_mask"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#B0000000"
    android:visibility="gone"/>

您还可以同时添加一个 ProgressDialog,以显示/关闭:

//The UI message to show the user during the loading 
private void showProgressDialog() {
    if (progressDialog == null) {
        progressDialog = new ProgressDialog(Objects.requireNonNull(getParentFragment())
                .getActivity());
        progressDialog.setIndeterminate(true);
        progressDialog.setCancelable(false);
    }
    progressDialog.setMessage("Loading...");
    progressDialog.show();
}

private void dismissProgressDialog() {
    if (progressDialog != null) {
        progressDialog.dismiss();
    }
}

如果你把这三个结合起来,我认为它是一个很好的等待屏幕,那么你可以像这样把这些方法放在一起:

//The user can interact with the UI, end of progressdialog and waiting mask
private void unlockUI() {
    loadingMask.setVisibility(View.GONE);
    dismissProgressDialog();
    enableUserInteraction();
}

//The user cannot interact with the UI, start of progressdialog and waiting mask
private void lockUI() {
    showProgressDialog();
    disableUserInteraction();
    loadingMask.setVisibility(View.VISIBLE);
}

您只需要在启动时调用 lockUI() 并在用户可以再次与屏幕交互时调用 unlockUI()。

希望这会有所帮助,让我们知道进展如何!

【讨论】:

  • 感谢您的回答。但是如果我这样做,屏幕将被锁定在两侧。汽车显示屏和手机。我只想锁定 Android 屏幕并仅在车载显示屏上显示屏幕。
猜你喜欢
  • 2014-01-27
  • 2017-02-14
  • 1970-01-01
  • 2018-04-20
  • 2013-09-24
  • 1970-01-01
  • 2013-04-15
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多