2016-06-11 32 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; 
      } 
     });