Android 活动之间显示锁屏

Android 活动之间显示锁屏,android,android-activity,lockscreen,Android,Android Activity,Lockscreen,我正在开发一个可以启动其他android应用程序的kiosk应用程序。它运行在锁屏的顶部。我看到的问题是锁屏在活动之间短暂显示。我们必须锁定平板电脑,这样解锁就不是一个选项 我已经能够用一个超级简单的案例来重现这一点。这两项活动几乎完全相同。该应用程序是一个设备管理员,可以显示在键盘上方。我也尝试过根本不使用finish(),但这并没有解决问题 public class MainActivity extends Activity { private Handler h = new Ha

我正在开发一个可以启动其他android应用程序的kiosk应用程序。它运行在锁屏的顶部。我看到的问题是锁屏在活动之间短暂显示。我们必须锁定平板电脑,这样解锁就不是一个选项

我已经能够用一个超级简单的案例来重现这一点。这两项活动几乎完全相同。该应用程序是一个设备管理员,可以显示在键盘上方。我也尝试过根本不使用
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();
                    }
                });
            }
        });
    }
}
如何启动其他活动而不首先短暂显示锁屏

如何启动其他活动而不简要显示 锁屏优先

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

您(很可能)还需要告诉系统不要提供窗口动画。通过将以下内容添加到应用程序主题中实现:

<item name="android:windowAnimationStyle">@null</item>
@null

您是否尝试过在startActivity()之后使用overridePendingTransition(0,0)标记“活动”或“否”动画。这样可以防止新活动“滑入”,而只是立即启动它们。我不确定是不是修好了,但值得一看。我已经试过了。这似乎没什么区别。这也许行得通。我会把我的发现发回来。所以我还没有真正测试过这个,但是:根据之前的测试,这个是行不通的。我从这两项活动中完全删除了
finish()
。这将产生与虚拟活动相同的效果,因为堆栈中仍然有活动。锁屏仍然会短暂地显示出来。@Randy我没有亲自尝试就提出了这种方法。道歉。它不起作用。我还尝试了什么:在启动activity-2之前显示屏幕大小的PopupWindow,并使用
键入_TOAST
(在启动activity-2之后立即将其删除),这是行不通的。使用窗口管理器的
addView(…)
和类型为\u SYSTEM\u的警报集添加屏幕大小的不透明视图不起作用。@Randy所起的作用是使用
片段
代替
活动
。由于您在使用片段时从不离开某个活动,因此锁定屏幕不会干扰—甚至不会短暂地干扰。我知道从活动到片段并不是一个直接的决定(对于任何规模的应用程序)。但是,你可以考虑这样做作为最后的手段——万一没有其他东西出现。“兰迪只是想知道,当你没有设置<代码>安全< /代码>锁(比如模式锁等)时,锁屏会显示出来吗?如果没有,您可能可以设置非安全解锁机制,如
滑动锁
,并将您的应用程序声明为主屏幕应用程序:使用
category.home
category.DEFAULT
作为意图过滤器。这样,您将限制用户访问android的默认启动器-我猜这是安全锁的目的。