메뉴 건너뛰기

모바일앱


아시다시피 안드로이드의 서비스는 LMK나 Task killer로 인해 언제든 소리와 소문없이 종료될 수 있습니다.

이로인해 무정지 서비스를 위한 많은 꽁수들이 인터넷에 널려 있지만 안드로이드 플랫폼 버전이 업데이트 되면서 모두 무용지물이 되어버렸더군요.

이에, (갤럭시 노트2) KITKAT버전에서 확실하게 동작하는 두가지 방법을 공유합니다.


1. 노티바(Notification bar)에 자신의 앱 아이콘과 설명화면이 표시되는 형태


startForeground() 함수를 이용하시면 됩니다. 간단한 예는 아래와 같습니다. 이러면, 노티바에 아이콘이 나타나고 노티바를 주룩~ 내리면 앱의 설명이 표시되고 있습니다.

무정지로 돌리고픈 서비스의 onStartCommand() 함수등에 아래와 같이 코드를 작성합니다.

//Kitkat 혹은, 이전버전에서는 아이콘이 표시되지 않을수도 있습니다^^
startForeground(1, new Notification());



2. 노티바에 자신의 앱 아이콘이 표시되지 않고 노티바를 내렸을때 설명화면만 표시되는 형태


네, 이 팁의 하이라이트 입니다. 노티바에 아무런 표시를 하지 않고 서비스를 계속해서 살려놓는 방법입니다. 하지만, 노티바를 내렸을때는 어쩔수 없이 앱의 설명화면이나 자신이 제작한 위젯뷰를 들키게(?) 됩니다. 유명 앱들이 대부분 이와 같은 방법을 쓰고 있었습니다. 현재수준에서는 마지노선이 아닐까 싶습니다.ㅋ


MyNotiControl.java 파일입니다.

public class MyNotiControl {

private Context context;
private RemoteViews rView;
private NotificationCompat.Builder nBuilder;

public MyNotiControl (Context parent) 
{
    this.context= parent;
    nBuilder = new NotificationCompat.Builder(context)
    .setContentTitle("GUNMAN SERVICE")
    .setSmallIcon(R.drawable.ic_launcher)
    .setPriority(Notification.PRIORITY_MIN) //요 부분이 핵심입니다. MAX가 아닌 MIN을 줘야 합니다.
    .setOngoing(true);

    rView = new RemoteViews(parent.getPackageName(), R.layout.mycontrolview); //노티바를 내렸을때 보여지는 화면입니다.

    //set the listener
    setListener(rView);
    nBuilder.setContent(rView);    
}

public Notification getNoti()
{
    return nBuilder.build();
}

public void setListener(RemoteViews view){
    Intent i = new Intent(context, MyNotiControlView .class);
    i.putExtra("Foo", "bar");
    PendingIntent button = PendingIntent.getActivity(context, 0, i, 0);
    view.setOnClickPendingIntent(R.id.btn, button);
}


무정지로 돌리고픈 서비스의 onStartCommand() 함수내에 아래와 같이 코드를 작성합니다.

//서비스 클래스의 onStartCommand 함수 등에서-
MyNotiControl cl = new MyNotiControl(context);
startForeground(1, cl.getNoti());

MyNotiControlView.java 파일입니다. 노티바를 내렸을 때 나타나는 화면(위젯뷰)을 위한 클래스입니다. 해당 화면에서 발생하는 이벤트(인텐트)를 핸들링하게 될 Activity인거죠. (원하시는 대로 코드를 채워넣으면 됩니다)

public class MyNotiControlView extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    String foo = (String) getIntent().getExtras().get("Foo");
    if (foo.equals("bar")) {
      //
    }
 }


}


mycontrolview.xml 파일입니다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">

<Button
    android:id="@+id/btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="GO" />

</LinearLayout>




이 게시물이  
AiRPAGE가  
번호 제목 글쓴이 날짜 조회 수
공지 [TIP] 안드로이드 앱 빌드시 "Error:Execution failed for task ':app:compileDebugJavaWithJavac'" 오류가 발생할 경우 파이팅건맨 2017.09.13 14173
공지 [TIP] 안드로이드 - 설치된 앱 목록 얻기 파이팅건맨 2016.03.22 8419
공지 [TIP] 안드로이드 앱이 처음 설치될때 Referrer 정보 받아 오기 파이팅건맨 2016.08.30 7587
47 [TIP] DJI Mobile SDK + OpenCV 적용 방법 파이팅건맨 2021.10.30 16
46 [TIP] 안드로이드 프로젝트 열 때 Failed to apply plugin [id 'com.android.application'] 오류 파이팅건맨 2021.07.03 75
45 [TIP] React-native 빌드 오류 대응 방법 파이팅건맨 2021.09.10 90
44 [TIP] http://tizen.org/system/tizenid 으로 타이젠 고유 id를 확보할 때 유의할 점 파이팅건맨 2019.03.14 222
43 tizen .net wearable widget 질문해도 될까요? [1] 갤럭시규 2019.08.19 255
42 [TIP] Tizen Push가 갑자기 내려오지 않을때 파이팅건맨 2019.05.20 359
41 [TIP] 안드로이드 앱이 처음 설치될때 Referrer 정보 받아 오기 (2020.3.1 이후) [2] 파이팅건맨 2020.10.15 391
40 [TIP] Google Cloud API 사용시 안드로이드의 Assets 폴더에 있는 Crendential 파일 사용하기 파이팅건맨 2018.05.29 462
39 [TIP] Mac에서 Cordova run android 를 실행했는데 "Command failed with exit code EACCES" 오류가 뜰때 파이팅건맨 2019.01.22 588
38 [TIP] Jquery Mobile로 iOS앱 개발시 Status바 처리 파이팅건맨 2014.08.27 616
37 [TIP] 내 안드로이드 앱에 위젯을 띄우는 방법 파이팅건맨 2015.06.03 653
36 [TIP] iOS 앱 개발시 HTTP POST로 데이터 전송 방법 파이팅건맨 2014.06.07 721
35 [TIP] 안드로이드에서 대용량 이미지 읽기 파이팅건맨 2013.04.15 771
34 [TIP] 안드로이드 카메라 영상에 그림 그린후 저장하기 파이팅건맨 2013.01.02 780
33 [펌] 안드로이드 에뮬레이터 속도 개선방법 파이팅건맨 2012.07.19 893
32 회원가입 [1] 권경민 2011.01.11 920
31 [TIP] GPRS Connection 관련 파이팅건맨 2010.02.22 921
30 [LINK] WM - Android Dual Boot 파이팅건맨 2010.02.04 936
29 [LINK] Windows Mobile G-Senstor 예제 파이팅건맨 2010.02.04 958
28 [LINK] Windows Mobile 카메라 캡쳐 관련 참고 파이팅건맨 2010.02.04 971
위로