[Android]foreground service에서 notification bar 감추기 AOS



젤리빈 이상에서 foreground service를 사용하면 노티바에서 감추기가 불가능하도록 바뀌었다. 

foreground로 서비스를 실행할 때 유저에게 알려주고자 하는 구글의 마음은 십분 이해하지만, 
지저분하다고 지워달라는 고객사의 요청(이라쓰고 갑의 횡포라 읽는)이 더 쎈걸 어찌하나. 

뭐 어차피 플레이스토어에 릴리즈 되지 않는 어플을 만드는지라 이런 꼼수를 사용해도 별 탈 없겠지 싶고,
혹시나 필요한 사람을 위해
슬쩍 올려보는 꼼수. 


startForeground(ID_FOREGROUND, mBuilder.build());


뭐 이런 식으로 서비스를 실행하고 난뒤 


NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

Notification notification = new Notification(0, "hello", System.currentTimeMillis());

notification.setLatestEventInfo(context, "title", "text", null);

nm.notify(ID_FOREGROUND, notification);

nm.cancel(ID_FOREGROUND);


Notification 관련 메소드는 deprecated되었는데, 귀찮아서 안바꿨다. (아, 이것때문에 되는건가?) 양해를.

그냥 cancel 하면 먹질 않는데, 한번 위에 덧(?)씌우고 나면 잘된다. 


foreground로 서비스가 유지되는지 확인도 완료. 참고 페이지.

http://www.androidpub.com/829786


엑스페리아z2에서는 재부팅하며 위의 소스를 실행했을때 notify되고 cancel되는게 빠른지 foreground 알림이 남아있는 경우가 있었다. 

원인 찾기 귀찮아서 사이에 sleep 10 정도 두는걸로 해결했다;;



다만... 저래도 서비스가 죽을땐 죽는다는거.

죽지않는, 죽어도 되살아나는 좀비 프로세스를 만들다 헛발질해서 나온 희귀한 결과라 일단 기록. 


언제까지 이 코드가 먹을지 모르겠지만, 킷캣에서도 잘 돌아가니 아마도 쫌 오랫동안 먹을듯.







덧글

  • 2015/10/28 21:58 # 삭제 답글 비공개

    비공개 덧글입니다.
  • 2015/10/28 21:58 # 삭제 답글 비공개

    비공개 덧글입니다.
  • 후덜덜 2015/10/28 21:59 # 삭제 답글

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext())
    .setSmallIcon(R.mipmap.l_launcher)
    .setColor(Color.parseColor("#ffffff"))
    .setWhen(System.currentTimeMillis())
    .setContentTitle("카우치그램");
    startForeground(1, mBuilder.build());


    CompositeSubscription subscription = new CompositeSubscription();
    subscription.add(Observable.empty()
    .delay(5, TimeUnit.SECONDS)
    .subscribeOn(Schedulers.io())
    .observeOn(Schedulers.newThread())
    .subscribe(new Subscriber<Object>() {
    @Override
    public void onCompleted() {
    LogUtils.v("DEBUG110", "onCompleted");
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(getApplicationContext());
    NotificationCompat.Builder cancelmBuilder = new NotificationCompat.Builder(getApplicationContext())
    .setSmallIcon(R.mipmap.l_launcher)
    .setColor(Color.parseColor("#ffffff"))
    .setWhen(System.currentTimeMillis())
    .setContentTitle("카우치그램");
    notificationManager.notify(1,cancelmBuilder.build());
    notificationManager.cancel(1);
    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onNext(Object o) {

    }
    }));

    5초뒤에 사라지게 했는데 ㅠㅠ 동작이 되지않네요 혹시 제가 잘못한건가여?
댓글 입력 영역


adsence 160x600