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

doze mode 때문에 가슴이 미어집니다.

0 추천
6.0 미만 버전은 초기 스마트폰 인터넷 된 상태에서 개발앱으로 알람설정을 하고, 지정된 시간에 알람이 울리게 설정을 하면, 데이터 네트워크, 인터넷이 안되는 환경에서도 알람이 울립니다.(개발앱이 내부알람을 설정)

그러나 6.0 마시멜로 이상부터는 알람을 설정하면, doze mode로 들어가는데, 데이터네트워크가 안된 상황에서도 알람이 울려야 하는데, doze mode에서 깨어나지 않습니다.

앱을 서비스하고 있는데, 이것 때문에, 계약 자체가 끊길 상황입니다. 물론 비용은 소소하지만. ㅠ.ㅠ

도대체, doze mode 상태에서 외부 네트워크(인터넷)이 안되는 스마트 폰을 어떻게 알람이 울 수 있게 할 수 있나요?

물론 권한설정(화이트 리스트로 가게하는 거)등등 해봤습니다.

소스입니다.

package kr.smitc.util;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Build;

import kr.smitc.AlarmReceiver;

/**
 * Created by  on 2017-08-25.
 */

public class AlarmUtil {

    private static AlarmUtil _instance;

    public static AlarmUtil getInstance() {
        if (_instance == null) _instance = new AlarmUtil();
        return _instance;
    }

    public void startAlram(Context context, int delay) {

        // AlarmOneMinuteBroadcastReceiver 초기화
        Intent alarmIntent = new Intent(context, AlarmReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);

        // 1분뒤에 AlarmOneMinuteBroadcastReceiver 호출 한다.
        startAlram(context, pendingIntent, delay);
    }

    private void startAlram(Context context, PendingIntent pendingIntent, int delay) {

        // AlarmManager 호출
        AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        // 1분뒤에 AlarmOneMinuteBroadcastReceiver 호출 한다.
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            manager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + delay, pendingIntent);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            manager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + delay, pendingIntent);
        } else {
            manager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + delay, pendingIntent);
        }
    }
}
익명사용자 님이 2017년 8월 29일 질문

1개의 답변

0 추천
울려야 할텐디..

              if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    AlarmManager.AlarmClockInfo info = new AlarmManager.AlarmClockInfo(alarmCalendar.getTimeInMillis(), pendingIntent);
                    am.setAlarmClock(info, pendingIntent);
                } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                    am.setExact(AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), pendingIntent);
                } else {
                    am.set(AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), pendingIntent);
                }
익명사용자 님이 2017년 8월 31일 답변
...