마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Android 백그라운드 서비스에서 실행중인 다른 앱 종료 어떻게 해야할까요?

0 추천

안녕하세요. 안드로이드 개발을 시작하는 초보 개발자입니다. 

특정 어플의 실행을 방지하기 위한 방법을 모색하다가

백그라운드 서비스를 수행하여 5초에 한번씩 실행 중인 앱중에 특정 패키지를 확인하면 종료하려고 합니다. 

다음이 제가 구현한 백그라운드 서비스의  OnStart 메쏘드구요. 

@Override

public void onStart(Intent intent, int startId) {

    Log.d("slog", "onStart()");

    super.onStart(intent, startId);

    String packageName = null;

    SharedPreferences pref = getSharedPreferences("pref", MODE_PRIVATE);

    packageName = pref.getString("pkgname", ""); //공유자원에서 패키지명 가져오기 

    Log.i("ServiceClass","package : "+ packageName);

        

    ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);    

    //실행중인지 판단

    List<RunningAppProcessInfo> list = am.getRunningAppProcesses();

    for (RunningAppProcessInfo rap : list) {

        if(rap.processName.equals(packageName)) {    //실행중인 목록에 해당 패키지명이 있을 경우

             int sdkVersion = Integer.parseInt(Build.VERSION.SDK);    //안드로이드 버젼 확인

             if (sdkVersion < 8){

                 am.restartPackage(rap.processName);    //해당 패키지 종료 - 1

             } else {

                 am.killBackgroundProcesses(rap.processName);    //해당 패키지 종료 - 1 

             }

             android.os.Process.killProcess(rap.pid);    //해당 프로세스 아이디로 프로세스 종료 - 2

             Log.i("ServiceClass"," Kill "+ packageName + "!!");  

        }

    }       

}

실행 방지를 위한  package명은 액티비티에서 설정하여 SharePerferences  로 전달받아서

실행중인 어플중 해당 패키지명과 동일하면 종료하도록 위와 같이 구현하였으나, 

실제 테스트를 해보면 해당 패키지를 종료시키지 못하고 있습니다. 

테스트 환경은 Kitkat 4.4 구요. 

에뮬레이터에서도, 제가 가지고 있는 갤력시 S3 와 CM1.1이 올라간 모토로라 레이저에서도 

정상 동작을 하지 않고 있습니다. 

해결책 아시는 분 알려주시면 정말 감사하겠습니다. ㅠ.ㅠ

 

 

 

냉면맛있어 (120 포인트) 님이 2014년 2월 17일 질문

1개의 답변

0 추천

다른 앱을 죽이는 기능은 사실상 막혔다고 보시면 됩니다.

killBackgroundProcesses 나 restartPackage 는 제약사항이 있고,

killProcess 등으로 죽이면 안드로이드 OS가 해당 앱이 비정상 종료된 것으로 간주하여 다시 띄운다고 합니다.

특정 앱을 확실하게 죽이는 것은 앱 설정 화면에서 강제 종료 버튼을 누르거나, 기기에 선탑재 되어있는 제조사가 만든 작업관리자 앱을 이용하는 방법 뿐입니다.

 

익명사용자 님이 2014년 2월 17일 답변
답변 감사합니다. 만약 그렇다면, 특정 패키지의 실행을 하지 못하도록 하는 방법이 있을까요?
일반 앱은 아마도 힘들듯 합니다.
...