글쓴이 보관물: 낭창

안드로이드앱이 항상 시작되도록 하기

근 1년 전에 안드로이드앱이 항상 실행되어 있도록 하기 위해서 썼던 방법.
(그 때 당시 자동 업데이트 기능으로 업데이트 후 다시 실행하는 것도 이 방법으로 해결했음)

우선 Activity 의 인스턴스가 1개만 존재하도록 해야 하므로 메인 activity의
lanuchMode를 singleTask로 설정해 준다.

<activity
            android:name=”.SampleActivity”
            android:label=”@string/app_name” android:theme=”@android:style/Theme.NoTitleBar.Fullscreen”
            android:launchMode=”singleTask”>

그리고, Service 를 하나 추가하고, Service에서 Alarm 으로  메인 Activity에 주기적으로 Intent를 날리도록 한다.

public class SampleService extends Service
{
    private static final int ALARM_INTERVAL = 30000;
    private boolean bRunning = false;

    public int onStartCommand(Intent intent, int flags, int startId) {
        if (!bRunning) {
            bRunning = true;                        
                       
            final Intent alarmIntent = new Intent(this, SampleActivity.class);
            final PendingIntent pender = PendingIntent.getActivity(this, 0, alarmIntent, 0);
                       
            long triggerTime = SystemClock.elapsedRealtime() + 1000*30;
                       
            final AlarmManager alarm = (AlarmManager) this
                                            .getSystemService(Context.ALARM_SERVICE);
            alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, triggerTime,
                               ALARM_INTERVAL, pender);
        } else {
            Log.e(“hadpan”, “sample service thread is already running”);
        }

        return START_STICKY;
    }

}

해당 Activity가 singleTask 로 설정되었기 때문에 Activity가 존재 한다면, 화면이 활성화 되고,
아직 만들어지기 전이라면 새로 앱을 실행하게 된다.

alarm 주기는 필요에 따라 적당히 조절하면 되는데.. 사실 이런 alram을 쓰는거 자체가 별로 권장하는 방법은 아니다.
당시, 만들던 앱 자체가 단말기를 전용 단말기 처럼.. 그러니까 단말기에서 해당 앱만 동작하면 되는 형태여서..
(일종의 키오스크 형태)

이 방법을 사용했지만 그다지 좋은 방법이라고는 생각되지 않음…=_=