2016-06-11 69 views
0

有没有办法阻止从服务的任何应用程序的触摸?我一直在想getWindow(),但这在服务中是不可能的。此外,我一直在考虑获取当前活动,然后使用getWindow()。我希望你明白我试图达成的目标。从服务块触摸

+0

您可以使用'WindowManager'在顶部添加一个视图,并自己消耗所有的点击次数。这就是那些“屏幕锁定”应用程序的做法。 –

+0

好主意。谢谢!我得到这个_无法添加窗口android.view.ViewRootImpl$[email protected] - 权限被拒绝这个窗口type_。当我尝试在Android API> = 23的设备上将视图添加到“WindowManager”时发生错误。 – jelic98

回答

0

感谢David Medenjak我设法解决了这个问题。该解决方案正在研究23以下的Android API,并且它将使屏幕变黑并阻止触摸,直到您在屏幕上长按。

 WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

     ImageView black = new ImageView(this); 
     black.setImageResource(R.drawable.black); 

     WindowManager.LayoutParams params = new  WindowManager.LayoutParams(
       WindowManager.LayoutParams.MATCH_PARENT, 
       WindowManager.LayoutParams.MATCH_PARENT, 
       WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 
         WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
       PixelFormat.TRANSLUCENT); 

     params.gravity = Gravity.TOP | Gravity.LEFT; 
     params.x = 0; 
     params.y = 0; 

     windowManager.addView(black, params); 

     black.getLayoutParams().height = windowManager.getDefaultDisplay().getHeight(); 
     black.getLayoutParams().width = windowManager.getDefaultDisplay().getWidth(); 

     black.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       return false; 
      } 
     });