活动之间显示锁屏
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-1
,dummy-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.HOME
和category.DEFAULT
作为intent-filters。这样,您将限制用户访问 android 的默认启动器 - 我猜这 是 安全锁的目的。以上是关于活动之间显示锁屏的主要内容,如果未能解决你的问题,请参考以下文章