提问人:Siddhant Shelake 提问时间:9/18/2023 最后编辑:Siddhant Shelake 更新时间:9/18/2023 访问量:154
React Native:在 Android 上使用 FLAG_SECURE 实现自定义背景屏幕
React Native: Implementing Custom Background Screen with FLAG_SECURE on Android
问:
我正在开发一个 React Native 项目,当应用程序进入后台时,我需要从 Android“概述屏幕”中隐藏应用程序的内容。我尝试使用以下代码:
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
);
这成功地隐藏了内容,但现在我想显示自定义屏幕而不是默认的白屏。
这是我在 MainActivity 中实现的代码:
public class MainActivity extends ReactActivity {
private LinearLayout mainLayout;
private LinearLayout secureLayout;
@Override
protected String getMainComponentName() {
return "AwesomeProject";
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
);
setContentView(R.layout.secure_layout);
secureLayout = findViewById(R.id.secureLayout);
}
@Override
protected void onStart() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,WindowManager.LayoutParams.FLAG_SECURE);
mainLayout.setVisibility(View.VISIBLE);
secureLayout.setVisibility(View.GONE);
super.onStart();
}
@Override
protected void onPause() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
mainLayout.setVisibility(View.GONE);
secureLayout.setVisibility(View.VISIBLE);
super.onPause();
}
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new DefaultReactActivityDelegate(
this,
getMainComponentName(),
DefaultNewArchitectureEntryPoint.getFabricEnabled()
);
}
}
但是,此代码未提供预期的结果。自定义屏幕未按预期显示。谁能帮我确定我哪里出错了,或者提出更好的方法来实现这一目标?
谢谢!
答:
1赞
DinhNguyen
9/18/2023
#1
- 将主布局设置为一个 id(例如
mainLayout
) - 创建自定义屏幕 (.xml) 以在应用在后台显示。为它设置一个 id(比如
secureLayout
) - 将以下代码添加到您的活动中:
LinearLayout mainLayout, secureLayout;
@Override
protected void onPause() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
mainLayout.setVisibility(View.GONE);
secureLayout.setVisibility(View.VISIBLE);
super.onPause();
}
@Override
protected void onStart() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,WindowManager.LayoutParams.FLAG_SECURE);
mainLayout.setVisibility(View.VISIBLE);
secureLayout.setVisibility(View.GONE);
super.onResume();
}
评论
0赞
Siddhant Shelake
9/18/2023
我们应该在其中初始化私有 LinearLayout mainLayout;私有 LinearLayout secureLayout;
评论