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 に答える