2017-07-02 46 views
0

我在零售应用程序,需要发挥环路的视频全屏,并限制了设备本身的控制,因此应用程序不能被客户关闭,篡改设备工作等真正的全屏活动

我已经研究了Android的沉浸式模式,但那只能让我走到一半。我需要能够从根本上禁用软键和硬键导航键,并防止打开状态栏下拉菜单。

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

回答

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。

Android清单

<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

+0

的TYPE_SYSTEM_OVERLAY标志似乎使我VideoView没用,它播放音频,但完全是黑色的。另外,我已经解决了后退按钮的情况,更重要的是我在“禁用”时遇到了问题。 – Hybrid

+0

您是否尝试过应用程序固定?也请附上您的活动。 – Abhi

+0

不会应用固定要求5.0+以及必须手动启用每个设备上? – Hybrid