Service with Overlay - catch back button press

前端 未结 4 1467
生来不讨喜
生来不讨喜 2021-02-08 04:47

How can i do that?

Current solution

I launch a transparent activity, that catches the back press, forwards it to my service and closes itself af

4条回答
  •  無奈伤痛
    2021-02-08 05:10

    I found solution for this issue,It's working good.

    public class MyFooterService extends Service{
    View myview;
    WindowManager wm;
    FrameLayout wrapper;
    public MyFooterService() {
    
    }
     @Override
    public void onCreate() {
        Log.d(TAG, "onCreate called");
        LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                90,  //height of ur layout
                WindowManager.LayoutParams.TYPE_PHONE,
                0,
                PixelFormat.TRANSLUCENT);
    
        params.gravity = Gravity.BOTTOM ;
        params.x = 0;
        params.y = 0;
       wrapper = new FrameLayout(this) {
            @Override
            public boolean dispatchKeyEvent(KeyEvent event) {
                if (event.getKeyCode()==KeyEvent.KEYCODE_BACK) {
                  // handle the back button code;
                 return true;
                }
              return super.dispatchKeyEvent(event);
            }
           //if pressed home key,
          public void onCloseSystemDialogs(String reason) {
                //The Code Want to Perform.
                System.out.println("System dialog " + reason);
                if (reason.equals("homekey")) {
                    // handle home button 
                }
            }
    
         };
       myview = li.inflate(R.layout.my_footer, wrapper);   // here set into your own layout
       wm.addView(myview, params);
    
    }
    }
    

提交回复
热议问题