锁屏在活动之间显示

Ran*_*ndy 12 android lockscreen android-activity

我在一个可以启动其他Android应用程序的自助服务终端应用程序上工作.它运行在锁屏顶部.我看到的问题是锁屏在活动之间短暂显示.我们必须锁定平板电脑,因此解锁不是一种选择.

我已经能够用一个超级简单的案例重现这一点.这两项活动几乎相同.该应用程序是设备管理员,可以显示在键盘锁上方.我也尝试过根本没用finish(),但是没有解决这个问题.

public class MainActivity extends Activity {

    private Handler h = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button bneg1 = (Button) findViewById(R.id.bneg1);
        bneg1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                h.post(new Runnable() {
                    @Override
                    public void run() {
                        Intent i = new Intent(MainActivity.this, SecondActivity.class);
                        startActivity(i);
                        finish();
                    }
                });
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

如果没有先短暂显示锁屏,我该如何启动其他活动?

Vik*_*ram 4

如何启动其他活动而不先短暂显示锁定屏幕?

实现此目的的一种更简单的方法是在启动之前运行一个虚拟(普通视图)活动activity-1。这样,当您完成时activity-1dummy-activity将接管,然后activity-2进入前台。

您(很可能)还需要告诉系统不要提供窗口动画。通过将其添加到您的应用程序主题来做到这一点:

<item name="android:windowAnimationStyle">@null</item>
Run Code Online (Sandbox Code Playgroud)

  • @Randy 所做的工作是使用“Fragments”代替“Activities”。由于您在使用片段时永远不会离开活动,因此锁定屏幕不会干扰 - 即使短暂干扰也不会。我知道从活动到片段并不是一个直接的决定(对于任何规模的应用程序)。但是,您可以考虑将这样做作为最后的手段 - 以防万一没有其他结果出现。 (2认同)