2016-06-11 9 views
0

Gibt es eine Möglichkeit, Touch auf ANY-Anwendung von einem Dienst zu blockieren? Ich habe über getWindow() nachgedacht, aber das ist unmöglich im Service. Außerdem habe ich darüber nachgedacht, aktuelle Aktivitäten zu erhalten und dann getWindow() zu verwenden. Ich hoffe, du weißt, was ich zu erreichen versuche.Block Touch von einem Service

+0

Sie können mit 'WindowManager' eine Ansicht hinzufügen und alle Klicks selbst konsumieren. So machen es die "Screen Lock" -Apps. –

+0

Gute Idee. Vielen Dank! Ich bekomme das _Unable Fenster hinzufügen [email protected] - Berechtigung für diesen Fenstertyp_ verweigert. Der Fehler tritt auf, wenn ich versuche, auf dem Gerät mit Android API> = 23 eine Ansicht zu 'WindowManager' hinzuzufügen. – jelic98

Antwort

0

Dank David Medenjak habe ich es geschafft, das Problem zu lösen. Diese Lösung arbeitet mit Android-APIs unter 23 und macht den Bildschirm schwarz und blockiert Berührungen, bis Sie auf dem Bildschirm lang drücken.

 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; 
      } 
     });