在活动之间显示锁屏

问题描述:

我致力于可以启动其他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(); 
        } 
       }); 
      } 
     }); 
    } 
} 

如何在没有它的情况下首先启动其他活动?

+0

您是否尝试过FLAG_ACTIVITY_NO_ANIMATION,并在startActivity()后使用overridePendingTransition(0,0)。这使得新的活动不再“滑入”,而是立即启动它们。不知道这是修复,但值得一看。 – zgc7009

+1

我已经试过了。它似乎没有任何区别。 – Randy

我怎样才能启动其他活动没有它首先简要显示 锁屏?

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

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

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

这只是可能的工作。我会回顾我的发现。 – Randy

+0

所以我没有真正测试过这个,但是:根据之前的测试,这不起作用。我完全删除了两个活动中的finish()。这会导致与虚拟活动相同的效果,因为我仍然会在堆栈中执行活动。锁屏仍然会短暂显示。 – Randy

+0

@Randy我建议这种方法没有尝试第一手。道歉。它不起作用。我还尝试过了什么:在启动活动2之前显示一个屏幕大小的PopupWindow与'TYPE_TOAST'(在之后解雇它) - 不起作用。使用设置了TYPE_SYSTEM_ALERT的窗口管理器的“addView(...)'添加屏幕大小的不透明视图不起作用。 – Vikram