1

我正在开发一个永久的主屏幕覆盖对话框,因为在按下主页按钮后服务启动活动时有 5 秒的延迟,我也被迫将我的活动代码放入服务中。我的应用程序运行良好,但当用户按下主页或返回按钮时,覆盖仍保留在屏幕上。有什么方法可以检测用户是否在我可以调用的服务.class 中按下主页或返回selfStop()并从屏幕上删除视图?在一个活动中,我可以使用 onStop 检查是否按下了主页按钮,但由于onStop()服务中没有我被卡住了。

有什么方法可以让主页按钮按预期做出反应?

4

1 回答 1

1

移动返回和主页按钮在服务类中运行良好。

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

   }
}
于 2017-12-19T07:23:05.283 回答