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

낮은 버전의 핸드폰에서 TimePickerDialog 를 호출하면 앱이 멈춥니다.

0 추천

안녕하세요. TimePicker 와 AlarmManager 공부를 하고 있는 학생입니다.

다름 아니라 안드로이드 스튜디오를 통해 구동한

가상기기(Nexus 5 API 26)에서는 제가 의도한대로 정상 작동을 하는데,

제 실제 핸드폰(Kitkat 4.4.2 API 19)에서는 작동이 중지됩니다.

타임피커를 그냥 처음부터 액티비티에 집어넣고 실행하는건 문제가 없는데,

버튼을 통해 Dialog로 출력을 할 경우에만 중단이 되네요.

 

public void btnClicked(View view) {
    TimePickerFragment timePickerFragment = new TimePickerFragment();
    timePickerFragment.show(getSupportFragmentManager(), "TimePicker");
}

 

public Dialog onCreateDialog(Bundle savedInstanceState){

    final Calendar c = Calendar.getInstance();
    int hour = c.get(Calendar.HOUR_OF_DAY);
    int minute = c.get(Calendar.MINUTE);

    TimePickerDialog tpd = new TimePickerDialog(getActivity(), this,
            hour,minute,DateFormat.is24HourFormat(getActivity()));

    return tpd;

 

코드는 이렇습니다.

핸드폰에서 구동시키는게 목푠데.. 정작 제 핸드폰에서는 오류가 나버리니 당황스럽네요..

시간을 입력받아 해당 시간에 알림이 발생하게 하는 것이 목표인데

그냥 textview로 입력받는 수 밖에는 없을까요?

 

 

/////추가

 

값을 가져오는 부분들(초보라 이게 맞는 표현인지 모르겠어요)을 지우면 다이얼로그 자체는 출력이 되네요.

Calendar c = Calendar.getInstance();

라던지

int hour = 10;//c.get(Calendar.HOUR_OF_DAY);
int minute = 10;//c.get(Calendar.MINUTE);

이런 부분들이요.

최소 API 24이상이 필요하다는걸 보면 제 핸드폰이 API 19여서 발생하는 문제가 맞는 것 같은데,

타임피커의 초기값은 임의로 주고, 단순히 띄워서 값을 입력만 한다는 건 가능하다고 쳐도..

 

@Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
        calendar.set(Calendar.MINUTE,minute);

        Intent intent = new Intent(getContext(), alram_test.class);
        PendingIntent operation = PendingIntent.getActivity(getContext(), 0, intent, 0);

        mAlarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), operation);
    }

 

후에 이런식으로 알람 기능에도 사용을 해야 하는데, 입력받은 값을 어떻게 받아와야 좋을까요..

 

JSeed 님이 2018년 10월 14일 질문
2018년 10월 14일 수정
에러가 나면, 에러로그도 같이 올리세요. 어지간하면 로그에 원인이 다 나옵니다.

1개의 답변

0 추천

해결했습니다.

import android.icu.util.Calendar;

이걸

import java.util.Calendar;

로 대체해주니 되네요.

캘린더 부분에서 계속 api 24 이상을 요구해서

폰 안드로이드 업데이트도 해봤지만 21이라 포기하려다가..

혹시라도 저와 같은 경우가 있으실까봐 남겨놓고 가요.

JSeed 님이 2018년 10월 18일 답변
...