제가 알람 어플을 만들어서 구글 플레이 스토어에 올렸는데
일부 기기에서 TimePickerDialog 의 동작에 Error가 나는 것을 발견했습니다.
다음과 같은 Error가 납니다.
1. "취소" 버튼이 없음.
왼쪽이 정상동작하는 휴대폰이고 오른쪽이 문제가 발생한 기기의 모습입니다.
문제가 있는 상태를 보시면 "취소" 버튼이 없고 단지 "저장" 버튼만 있습니다.

2. BackButton을 누르거나 대화상자 바깥쪽을 눌러도 저장됨.
문제가 된 기기에서는 BackButton을 누르거나 대화상자 바깥쪽을 누르면
"취소" 가 되지 않고 바로 "저장"이 되어 버립니다.
3. "저장" 버튼을 누르면 2번 저장됨.
아래 그림처럼 "저장" 버튼을 1번만 눌러도 2번 저장됩니다.

이렇게 3가지 문제가 발생하여 Google에서 관련 내용을 찾으니 datepickerdialog의 문제이지만
문제 내용은 완전히 동일한 것을 찾았습니다.
http://stackoverflow.com/questions/11444238/jelly-bean-datepickerdialog-is-there-a-way-to-cancel
계속 내용을 읽어보니 가장 아래 쪽에는 TimepickerDialog에 대한 부분도 있는데, "Set"과 "Cancel"
버튼을 따로 만들어서 동작하게 하라는 내용이어서 그대로 만들어서 해보았습니다.
결과는 문제가 생긴 기기에서는 원하는 대로 동작했습니다만,
기존에 잘되던 기기에는 "Set" 버튼을 눌러도 OnTimeSetListener()가 동작하지 않는 문제가 발생합니다.
여기서 질문드립니다.
1. 위의 발생한 3가지 문제를 해결하는 방법이 없을까요?
2. 꼭 "Set" 버튼과 "Cancel" 버튼을 만들어서 해야 한다면 "Set" 버튼을 눌렀을때 OnTimeSetListener()가 동작하게
하려면 어떻게 해야 하나요?
며칠째 해결이 않되서 거의 멘붕 상태입니다. 도움 부탁드립니다.
"Set" 버튼과 "Cancel" 버튼을 넣어서 고친 현재 코드는 다음과 같습니다.
TimePickerDialog timeDlg = new TimePickerDialog( this, new OnTimeSetListener()
{
@Override
public void onTimeSet( TimePicker view, int hourOfDay, int minute )
{
if ( isShow )
{
isShow = false;
Calendar calSet = CompareTimeNow(hourOfDay, minute, 0);
long storeTime = calSet.getTimeInMillis();
long storeTime2 = storeTime + (30*1000);
AlarmInsertActivity insert = new AlarmInsertActivity();
insert.addInputDirect(storeTime, hourOfDay,
minute, mRingtone_path, mRingtone_name, maxVolume);
AlarmSet.setAlarm(getApplicationContext(), mLastAlarmId+1, true);
AlarmSet.popTimeToast(getApplicationContext(), storeTime2);
updateListUI();
mLastAlarmId = loadSqliteSeq();
}
}
}, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), false );
timeDlg.setButton( TimePickerDialog.BUTTON_NEGATIVE, getText(android.R.string.cancel), new DialogInterface.OnClickListener()
{
@Override
public void onClick( DialogInterface dialog, int which )
{
isShow = false;
}
} );
timeDlg.setButton( TimePickerDialog.BUTTON_POSITIVE, getText(android.R.string.ok), new DialogInterface.OnClickListener()
{
@Override
public void onClick( DialogInterface dialog, int which )
{
isShow = true;
}
} );
timeDlg.show();