真正的全屏活动

时间:2017-07-02 11:01:51

标签: java android

我正在开发一个零售应用程序,需要在循环播放视频全屏,并限制对设备本身的控制,以便客户无法关闭应用程序,设备被篡改等。

我已经研究过Android的沉浸式模式,但这只能让我走到一半。我需要能够基本上禁用软键和硬件导航键,以及防止状态栏下拉列表被打开。

我是否完全错过了沉浸式模式,使这成为可能,或者是否有任何黑客可以完成这项任务?谢谢。

1 个答案:

答案 0 :(得分:0)

您可以尝试禁用硬件导航键(声音键,背面按键等),禁用背面按键和音量键。

禁用后退按钮

@Override
public void onBackPressed() {
// Leave it blank to disable it;
} 

禁用声音键

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int action = event.getAction();
int keyCode = event.getKeyCode();
    switch (keyCode) {
    case KeyEvent.KEYCODE_VOLUME_UP:
        if (action == KeyEvent.ACTION_UP) {
            //do nothing
        }
        return true;
    case KeyEvent.KEYCODE_VOLUME_DOWN:
        if (action == KeyEvent.ACTION_DOWN) {
            //do nothing
        }
        return true;
    default:
        return super.dispatchKeyEvent(event);
    }
}

禁用状态栏下拉列表

super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);
setContentView(R.layout.your_layout);

修改

要禁用状态下拉列表,请使用此method。这是覆盖状态栏并消耗所有输入事件。它可以防止状态扩大。

注意:

  1. customViewGroup是自定义类,可以扩展任何类 布局(框架,相对布局等)并消耗触摸事件。
  2. 使用触摸事件覆盖onInterceptTouchEvent方法 视图组并返回true。
  3. Android Manifest

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 
    

    customViewGroup实施

    WindowManager manager = ((WindowManager) getApplicationContext()
                .getSystemService(Context.WINDOW_SERVICE));
    
    WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams();
    localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
    localLayoutParams.gravity = Gravity.TOP;
    localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
    
                // this is to enable the notification to recieve touch events
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
    
                // Draws over status bar
                WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
    
        localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
        localLayoutParams.height = (int) (50 * getResources()
                .getDisplayMetrics().scaledDensity);
        localLayoutParams.format = PixelFormat.TRANSPARENT;
    
        customViewGroup view = new customViewGroup(this);
    
        manager.addView(view, localLayoutParams);
    

    禁用软键

    禁用软键的最佳方法是固定应用(App Pinning)。最后以沉浸式模式创建应用程序。您还可以将应用设置为启动器。然后,当单击主页按钮时,将调用您的应用程序,保持您的应用程序处于打开状态。

    为此,请添加两个类别。

    <category android:name="android.intent.category.LAUNCHER" />
    <category android:name="android.intent.category.HOME" />
    

    参考文档:https://developer.android.com/work/cosu.html