'Java' 카테고리의 다른 글
우선순위 큐(Priority Queue)와 힙(Heap) (0) | 2011.05.02 |
---|---|
Collection (0) | 2011.05.02 |
우선순위 큐(Priority Queue)와 힙(Heap) (0) | 2011.05.02 |
---|---|
Collection (0) | 2011.05.02 |
WiFi Settings에서 WiFi Enable이 되는 과정 분석. (0) | 2011.07.21 |
---|---|
Ring, Notification, Alarm etc. 저장 위치 (0) | 2011.07.14 |
안드로이드 안전모드 진입 (0) | 2011.07.12 |
CalledFromWrongThreadException (0) | 2011.07.05 |
ICU4C 빌드 방법. (0) | 2011.06.22 |
부팅하기 전부터 다음의 버튼중 하나만 누르고 있는 상태에서 부팅을 완료하게 되면, 안전모드로 들어가게 됩니다. 1. Menu Key 2. S Key 3. Dpad에서 Center Key 4. TrackBall Button |
run() { ...
// Before things start rolling, be sure we have decided whether
// we are in safe mode.
final boolean safeMode = wm.detectSafeMode();
if (safeMode) {
try {
ActivityManagerNative.getDefault().enterSafeMode();
// Post the safe mode state in the Zygote class
Zygote.systemInSafeMode = true;
// Disable the JIT for the system_server process
VMRuntime.getRuntime().disableJitCompilation();
} catch (RemoteException e) {
}
} else {
// Enable the JIT for the system_server process
VMRuntime.getRuntime().startJitCompilation();
}
...} |
public boolean detectSafeMode() {
try {
int menuState = mWindowManager.getKeycodeState(KeyEvent.KEYCODE_MENU);
int sState = mWindowManager.getKeycodeState(KeyEvent.KEYCODE_S);
int dpadState = mWindowManager.getDPadKeycodeState(KeyEvent.KEYCODE_DPAD_CENTER);
int trackballState = mWindowManager.getTrackballScancodeState(RawInputEvent.BTN_MOUSE);
mSafeMode = menuState > 0 || sState > 0 || dpadState > 0 || trackballState > 0;
performHapticFeedbackLw(null, mSafeMode
? HapticFeedbackConstants.SAFE_MODE_ENABLED
: HapticFeedbackConstants.SAFE_MODE_DISABLED, true);
if (mSafeMode) {
Log.i(TAG, "SAFE MODE ENABLED (menu=" + menuState + " s=" + sState
+ " dpad=" + dpadState + " trackball=" + trackballState + ")");
} else {
Log.i(TAG, "SAFE MODE not enabled");
}
return mSafeMode;
} catch (RemoteException e) {
// Doom! (it's also local)
throw new RuntimeException("window manager dead");
}
}
|
Ring, Notification, Alarm etc. 저장 위치 (0) | 2011.07.14 |
---|---|
The content of the adapter has changed but ListView did not receive a notification. (0) | 2011.07.12 |
CalledFromWrongThreadException (0) | 2011.07.05 |
ICU4C 빌드 방법. (0) | 2011.06.22 |
Time Zone 수정 방법. (0) | 2011.06.22 |
1.
public
void
onClick(View v) {
2.
new
Thread(
new
Runnable() {
3.
public
void
run() {
4.
txtView.setText(
"안녕하세요?"
);
// 텍스트뷰의 내용변경
5.
}
6.
}).start();
7.
}
01.
Handler handler =
new
Handler();
02.
03.
public
void
onClick(View v) {
04.
new
Thread(
new
Runnable() {
05.
public
void
run() {
06.
07.
handler.post(
new
Runnable() {
08.
public
void
run() {
09.
txtView.setText(
"이제는 됩니다."
);
10.
}
11.
});
12.
13.
}
14.
}).start();
15.
}
1.
// View.java
2.
public
void
invalidate() {
3.
...
4.
final
ViewParent p = mParent;
5.
...
6.
p.invalidateChild(
this
, r);
7.
}
01.
// ViewRoot.java
02.
public
void
invalidateChild(View child, Rect dirty) {
03.
checkThread();
04.
...
05.
}
06.
07.
public
checkThread() {
08.
if
(mThread != Thread.currentThread()) {
09.
throw
new
CalledFromWrongThreadException(
10.
"Only the original thread that created a view hierarchy can touch its views."
);
11.
}
12.
}
The content of the adapter has changed but ListView did not receive a notification. (0) | 2011.07.12 |
---|---|
안드로이드 안전모드 진입 (0) | 2011.07.12 |
ICU4C 빌드 방법. (0) | 2011.06.22 |
Time Zone 수정 방법. (0) | 2011.06.22 |
Locale Default 설정 및 Use 24-hour format Default 설정 (0) | 2011.06.16 |
안드로이드 안전모드 진입 (0) | 2011.07.12 |
---|---|
CalledFromWrongThreadException (0) | 2011.07.05 |
Time Zone 수정 방법. (0) | 2011.06.22 |
Locale Default 설정 및 Use 24-hour format Default 설정 (0) | 2011.06.16 |
안드로이드 OS의 기본언어(locale) 설정하기 (0) | 2011.06.15 |
CalledFromWrongThreadException (0) | 2011.07.05 |
---|---|
ICU4C 빌드 방법. (0) | 2011.06.22 |
Locale Default 설정 및 Use 24-hour format Default 설정 (0) | 2011.06.16 |
안드로이드 OS의 기본언어(locale) 설정하기 (0) | 2011.06.15 |
Locale에 따른 시간 포멧 설정. (0) | 2011.06.15 |
Settings -> Date and Time -> Use 24-hour format 을 Default로 설정하는 방법에 대해서 정리해 보았습니다.
일단 Use 24-hour format 기능은 onResume에서 아래와 같이 동작을 합니다.
@Override ... ((CheckBoxPreference)mTime24Pref).setChecked(is24Hour()); ... } private boolean is24Hour() { return DateFormat.is24HourFormat(this); }
|
위의 소스를 보시면 is24HourFormat 함수를 통해서 24시간인지 아닌지를 Return해줍니다.
여기서 is24HourFormat 함수를 보면 다음과 같은데 여기서 Settings.System.TIME_12_24란 Key값을 가진 Systemproperty의 값을 받아오는 것을 확인 하실수 있습니다.
하지만 최초 부팅시 또는 초기화후 부팅시에는 value값이 존재하지 않음으로 null이 됩니다.
/** |
value 값이 null이므로 시스템으로 부터 Locale의 값을 가지고 와서 Time format을 확인한 후 value값이 12인지 24인지에 따라서 True or False를 리턴하게 됩니다.
Format의 확인 형식은 다음과 같습니다.
yyyy MM dd HH:mm : 24시간을 표시 yyyy MM dd hh:mm a : 12시간을 표시 |
여기서 "h"란 pattern을 확인 한 후 시간을 구분하게 됩니다.
하지만 여기서 한가지 의문이 생기게 됩니다.
왜 Locale을 불러오는지 말입니다.
그래서 확인한 결과 각각의 나라별 시간 표시 형식이 구분되어 있기 때문에 Locale을 사용하는 것을 확인하였습니다.
예를 들면 en_US같은 경우는 12시간을 표시하고, de_DE 같은 경우는 24시간을 표시하게 됩니다.
그래서 Locale을 사용하게 되는 것입니다.
그리고 시간의 패턴을 표시하기 위해서는 is24HourFormat 란 함수를 사용하여 확인한 후 12시간을 표시할 것인지 24시간을 표시할 것인지를 소스상에서
구분하는 것을 확인 하실수 있을것입니다.
여기까지가 24시간인지 아닌지를 체크하는 프로세스입니다.
그러면 이제 Locale을 변경을 해야되는데 이 값의 변경은 보통 SetupWizard에서 처리를 해줍니다.
하지만 SetupWizard가 없을 경우에는 Default Locale로 설정을 해주는데, 이 값은 다음과 같은 경로의 MakeFile에서 설정을 해줍니다.
Android\device\samsung\YP-GS1\Product.mk Android\device\samsung\YP-GS1\full_YP-GS1.mk |
이 파일을 열어보면, 여러 설정들이 존재하는데 그 중에서 다음과 같은 부분을 확인 할 수 있습니다.
# Overrides PRODUCT_MANUFACTURER:=samsung PRODUCT_BRAND:=samsung PRODUCT_NAME:=YP-GS1 PRODUCT_DEVICE:=YP-GS1 PRODUCT_LOCALES := en_GB \ en_US en_AU en_IE en_NZ en_ZA \ de_AT de_CH de_DE \ fr_FR fr_CH \ it_IT \ es_ES \ es_US \ nl_NL \ pt_PT \ pl_PL \ tr_TR \ ko_KR \ ru_RU \ bg_BG hr_HR cs_CZ da_DK nl_BE et_EE fi_FI el_GR \ hu_HU is_IS ga_IE kk_KZ lv_LV lt_LT mk_MK no_NO \ pt_PT ro_RO sr_RS sk_SK sl_SI sv_SE uk_UA |
여기서 Product_locales부분을 확인 할 수 있는데 여기의 첫번째 값이 en_GB이냐 ko_KR이냐에 따라 최초 부팅시 Locale의 값이 바뀌게 됩니다.
그래서 만약 영국식 영어로 설정하고 싶을 경우에는 위와 같이 en_GB를 첫번째로 넣으시면 됩니다.
Locale Default 24 hour을 설정하는 방법은 다음과 같습니다.
Android/external/ICU4C/data/locales/en_GB.txt를 열어보면 다음과 같습니다.
// ***************************************************************************
// * // * Copyright (C) 2007 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java // * Source File:<path>/common/main/en_GB.xml // * // *************************************************************************** en_GB{ NumberPatterns{ "#,##0.###", "¤#,##0.00", "#,##0%", "#E0", } Version{"1.54"} calendar{ gregorian{ DateTimePatterns{ "HH:mm:ss v", "HH:mm:ss z", "HH:mm:ss", "HH:mm", "EEEE, d MMMM yyyy", "d MMMM yyyy", "d MMM yyyy", "dd/MM/yyyy", "{1} {0}", } } } delimiters{ alternateQuotationEnd{"”"} alternateQuotationStart{"“"} quotationEnd{"’"} quotationStart{"‘"} } zoneStrings{ "meta:Europe_Central"{ cu:int{1} } "meta:Europe_Eastern"{ cu:int{1} } "meta:Europe_Western"{ cu:int{1} } } }
여기서 gregorian영역안에서 Format에 해당하는 부분들을 추가해야 합니다.
예를 들면, dayNames, monthNames, quarters 등을 추가하여야 하며, 이를 적용한 부분의 예는 다음과 같습니다.
// ***************************************************************************
// * // * Copyright (C) 2007 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java // * Source File:<path>/common/main/en_GB.xml // * // *************************************************************************** en_GB{ NumberPatterns{ "#,##0.###", "¤#,##0.00", "#,##0%", "#E0", } Version{"1.54"} calendar{ gregorian{ DateTimePatterns{ "HH:mm:ss v", "HH:mm:ss z", "HH:mm:ss", "HH:mm", "EEEE, d MMMM yyyy", "d MMMM yyyy", "d MMM yyyy", "dd/MM/yyyy", "{1} {0}", }
dayNames{ format{ abbreviated{ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", } wide{ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", } } stand-alone{ narrow{ "S", "M", "T", "W", "T", "F", "S", } } }
monthNames{ format{ abbreviated{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", } wide{ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", } } stand-alone{ narrow{ "J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D", } } } quarters{ format{ abbreviated{ "Q1", "Q2", "Q3", "Q4", } wide{ "1st quarter", "2nd quarter", "3rd quarter", "4th quarter", } } stand-alone{ narrow{ "1", "2", "3", "4", } } } } } delimiters{ alternateQuotationEnd{"”"} alternateQuotationStart{"“"} quotationEnd{"’"} quotationStart{"‘"} } zoneStrings{ "meta:Europe_Central"{ cu:int{1} } "meta:Europe_Eastern"{ cu:int{1} } "meta:Europe_Western"{ cu:int{1} } } }
gregorian 영역안에 Format 영역을 추가 한 후 icudt44l.dat 파일을 생성한 후 stubdata 폴더에 복사하면 됩니다.
ICU4C 빌드 방법. (0) | 2011.06.22 |
---|---|
Time Zone 수정 방법. (0) | 2011.06.22 |
안드로이드 OS의 기본언어(locale) 설정하기 (0) | 2011.06.15 |
Locale에 따른 시간 포멧 설정. (0) | 2011.06.15 |
PowerManager 사용시 유의점. (0) | 2011.06.13 |
01.
# killed by the kernel. These are used in ActivityManagerService.
02.
setprop ro.FOREGROUND_APP_ADJ 0
03.
setprop ro.VISIBLE_APP_ADJ 1
04.
setprop ro.SECONDARY_SERVER_ADJ 2
05.
setprop ro.BACKUP_APP_ADJ 2
06.
setprop ro.HOME_APP_ADJ 4
07.
setprop ro.HIDDEN_APP_MIN_ADJ 7
08.
setprop ro.CONTENT_PROVIDER_ADJ 14
09.
setprop ro.EMPTY_APP_ADJ 15
10.
11.
# for default langudage
12.
setprop persist.sys.language ko
13.
setprop persist.sys.country KR
14.
setprop persist.sys.timezone Asia/Seoul
Time Zone 수정 방법. (0) | 2011.06.22 |
---|---|
Locale Default 설정 및 Use 24-hour format Default 설정 (0) | 2011.06.16 |
Locale에 따른 시간 포멧 설정. (0) | 2011.06.15 |
PowerManager 사용시 유의점. (0) | 2011.06.13 |
Resource[.xml]에서 add-resource 역할. (0) | 2011.05.20 |
public static final DateFormat getDateInstance(int style, Locale aLocale)
style
- 지정하는 포맷 스타일. 다음에 예를 나타냅니다. US 로케일에서의 M/d/yy 에 대한 SHORTaLocale
- 지정된 로케일Locale Default 설정 및 Use 24-hour format Default 설정 (0) | 2011.06.16 |
---|---|
안드로이드 OS의 기본언어(locale) 설정하기 (0) | 2011.06.15 |
PowerManager 사용시 유의점. (0) | 2011.06.13 |
Resource[.xml]에서 add-resource 역할. (0) | 2011.05.20 |
안드로이드 부팅 순서 (0) | 2011.05.16 |
boolean isScreenOn ()
void goToSleep (long time)
void reboot (String reason)
void userActivity (long when, boolean noChangeLights)
화면의 켜짐을 조사하거나 즉시 화면을 끄거나 재부팅하는 등의 기능을 제공한다. 화면을 강제로 끄는 goToSleep 메서드는 전원 버튼을 누르지 않아도 프로그램이 소프트웨어적으로 슬립 모드로 들어갈 수 있어 실용성이 있다. 그러나 아무나 사용할 수 있는 메서드는 아니므로 엄격한 제한이 따른다. 이 메서드를 사용하려면 DEVICE_POWER 퍼미션이 필요하며 또 시스템 앱으로 서명을 해야 한다.
안드로이드 OS의 기본언어(locale) 설정하기 (0) | 2011.06.15 |
---|---|
Locale에 따른 시간 포멧 설정. (0) | 2011.06.15 |
Resource[.xml]에서 add-resource 역할. (0) | 2011.05.20 |
안드로이드 부팅 순서 (0) | 2011.05.16 |
Key events executed on key-up (0) | 2011.05.12 |