簡體   English   中英

android投屏時如何鎖屏?

[英]How to lock android screen during screen mirroring?

我正在開發一個 android 應用程序,用於將 android 屏幕鏡像到汽車顯示屏。 我使用 MediaProjection 來獲取屏幕; 使用該 api 我能夠鏡像屏幕,現在我想在鏡像期間鎖定 android 屏幕以避免用戶分心。

有沒有辦法在流式傳輸期間鎖定 Android 設備屏幕? 例如顯示固定圖片或凍結設備屏幕和 stream 其他布局? 也許使用一些 API 等?

我個人通過設置/清除標志為用戶鎖定/解鎖 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()。

希望這會有所幫助,讓我們知道進展如何!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM