서비스에서 dialog를 팝업하는 방법

10527 단어
우리는 서비스가 인터페이스가 없고 백엔드에서 논리 코드를 묵묵히 실행하는 것을 알고 있다. 때로는 백엔드와 상호작용을 해야 한다. 예를 들어toast나 팝업 알림 상자 등이다.
서비스에서 Toast를 팝업하는 것은 간단합니다.handler만 사용하면 됩니다. 코드는 다음과 같습니다.
1
2
3
4
5
6
hanlder.post(new Runnable() {
    @Override
    public void run() {
        Toast.makeText(DialogService.this, "    ", 1).show();
     }
    });

서비스에서 다이어로그를 팝업할 때 activity와 같은 코드를 쓸 때 오류가 발생합니다. 이 다이어로그의 디스플레이는 하나의activity에 의존해야 하기 때문입니다. 서버에 다이어로그를 하나의 시스템의 다이어로그로 설정해야 합니다. 즉 전역적인 알림 상자입니다. 핸드폰이 켜진 상태라면 현재 어떤 인터페이스에 있든alter를 호출하면 됩니다.show (), 알림 상자가 팝업됩니다.show () 호출 전에 다음 코드를 추가해야 합니다.
1
dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));

주의: 시스템의Dialog를 사용하려면 목록 파일에 권한을 추가해야 합니다. 그렇지 않으면android가 나타나지 않습니다.permission.SYSTEM_ALERT_WINDOW
모든 코드
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("  ");
    builder.setMessage("    ");
    builder.setNegativeButton("  ", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    });
    builder.setPositiveButton("  ", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    });
    final AlertDialog dialog = builder.create();
    **// dialog  show          ,   dialog      dialog**
    dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));
    new Thread(){
        public void run() {
            SystemClock.sleep(4000);
            hanlder.post(new Runnable() {
                @Override
                public void run() {
                    dialog.show();
                }
            });
            };
    }.start();
}

좋은 웹페이지 즐겨찾기