活动之间显示锁屏

Posted

技术标签:

【中文标题】活动之间显示锁屏【英文标题】:Lockscreen is displayed between activities 【发布时间】:2014-04-18 20:16:49 【问题描述】:

我正在开发一个可以启动其他 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();
                    
                );
            
        );
    

如何在不先短暂显示锁屏的情况下启动其他活动?

【问题讨论】:

您是否尝试过 FLAG_ACTIVITY_NO_ANIMATION,在 startActivity() 之后使用 overridePendingTransition(0, 0)。这可以防止新活动“滑入”,而是立即启动它们。不确定它是否是修复程序,但值得一看。 我试过了。它似乎没有任何区别。 【参考方案1】:

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

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

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

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

【讨论】:

这可能行得通。我会回复我的发现。 所以我还没有真正测试过这个,但是:根据之前的测试,这是行不通的。我从这两个活动中完全删除了finish()。这将导致与具有虚拟活动相同的效果,因为我仍然会在堆栈中进行活动。锁屏仍会短暂显示。 @Randy 我在没有亲自尝试的情况下提出了这种方法。道歉。它不起作用。我还尝试了什么:在启动 activity-2 之前显示一个屏幕大小的 PopupWindow 和 TYPE_TOAST(之后立即关闭它)- 不起作用。使用设置了 TYPE_SYSTEM_ALERT 的窗口管理器的 addView(...) 添加屏幕大小的不透明视图 - 不起作用。 @Randy 所做的工作是使用Fragments 代替Activities。由于您在使用片段时从不离开活动,因此锁屏不会干扰 - 甚至不会短暂。我知道从活动到碎片不是一个直接的决定(对于任何规模的应用程序)。但是,您可以考虑将其作为最后的手段——以防万一。 @Randy 只是想知道,当您设置secure 锁定(如模式锁定等)时,是否会显示锁定屏幕?如果它没有,您可能可以设置像slide-lock 这样的非安全解锁机制并将您的应用程序声明为主屏幕应用程序:使用category.HOMEcategory.DEFAULT 作为intent-filters。这样,您将限制用户访问 android 的默认启动器 - 我猜这 安全锁的目的。

以上是关于活动之间显示锁屏的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用活动中的主页按钮单击 - 就像在锁屏应用程序中一样?

锁屏上的小部件

windows聚焦锁屏壁纸不显示

安卓设置锁屏时预览消息内容

win10锁屏后锁屏壁纸不显示怎么办

全屏透明活动(无标题和状态栏)不起作用....为啥?