[英]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.