[Android] SharedPreference의 활용
출처
안드로이드 데이터베이스 프로그래밍
제이슨 웨이 지음|허윤규 욺김
에이콘 출판사
안드로이드에서는 간단한 저장소로 SharedPreferences를 제공합니다.
SharedPreferences는 단순함과 효율성을 위해 기본 데이터형만 저장 가능합니다.
(boolean, int, float, long, string)
가시성
SharedPreferences는 가시성을 지정하여 접근할 수 있습니다.
MODE_WORLD_READABLE
다른 애플리케이션에서도 접근하여 읽기가 가능하게 합니다.
MODE_WORLD_WRITABLE
다른 애플리케이션에서 접근하여 읽고 쓸수 있드록 합니다.
MODE_MULTI_PROCESS
API 11레벨 이후로 사용가능한 가시성으로
여러 프로세스에서 같은 SharedPreferences를 사용할 수 있도록 해준다.
사용처
SharedPreferences의 사용은 보통 아래와 같다.
앱의 첫 실행 체크
앱의 첫 방문을 확인 할 수 있습니다.
마지막 업데이트 체크
업데이트 했던 시간을 체크해서 업데이트 주기를 지정해
자동으로 업데이트를 하거나 업데이트를 유도 할 수 있도록 합니다.
사용자 이름저장
로그인 사용자의 이름을 저장 할 수 있습니다.
앱 상태저장
애플리케이션의 상태를 저장 할 수 있습니다.
예를 들어, 앱의 사운드 상태나 언어 상태 등을 저장 할 수 있겠죠.
GPS캐시
마지막으로 동작했던 위치를 저장해두었다가
GPS가 꺼져있거나 동작이 잘 안될때
불러다 사용 할 수도 있습니다.
코드 살펴보기
다음은 사용자 앱 첫 방문 체크의 코드입니다.
public class HasVisited {
private static final String MY_DB="my_db";
private static String HasVisited = "hasVisited";
SharedPreferences sp;
public HasVisited(ContextWrapper cw) {
}
public boolean isHasVisited(ContextWrapper cw){
sp = cw.getSharedPreferences(MY_DB, Context.MODE_PRIVATE);
boolean hasVisited = sp.getBoolean(HasVisited, false);
if(!hasVisited){
Editor e = sp.edit();
e.putBoolean(HasVisited, true);
e.commit();
return false;
}
return true;
}
}
다음은 업데이트 체크의 코드입니다.
public class updateCheck {
private static final String MY_DB="my_db";
private static String Up_key = "lastVisitKey";
boolean haveToUpdate = true;
long lastVisitTime;
long timeElapsed;
final long UPDATE_FREQ = 1000*60*60*24; // (1000ms -> 60s -> 60m -> 24h)
SharedPreferences sp;
updateCheck(ContextWrapper cw){
sp = cw.getSharedPreferences(MY_DB, Context.MODE_PRIVATE);
lastVisitTime = sp.getLong(Up_key, 0L);
}
public boolean check(){
if(timeElapsed > UPDATE_FREQ){
return haveToUpdate;
}
return !haveToUpdate;
}
public void updateCompelete(){
Editor e = sp.edit();
e.putLong(Up_key, System.currentTimeMillis());
e.commit();
}
}
다음은 최근 사용자 이름을 저장하고 불러오는 코드 입니다.
public class CheckUserName {
private String UserName;
private static final String MY_DB="my_db";
private static String UN_key = "UserName";
SharedPreferences sp;
CheckUserName(String UserName, ContextWrapper cw){
this.UserName = UserName;
sp = cw.getSharedPreferences(MY_DB, Context.MODE_PRIVATE);
}
public String getLastUserName(){
String UserName = sp.getString(UN_key, "");
return UserName;
}
public void setLastUserName(String un){
Editor e = sp.edit();
e.putString(UN_key, un);
e.commit();
}
}
다음은 상태정보를 저장하는 코드입니다.
public class stateCheck {
private static final String MY_DB="my_db";
private static final String isSilentRinger= "isSilentRinger";
SharedPreferences sp;
stateCheck(ContextWrapper cw){
sp = cw.getSharedPreferences(MY_DB, Context.MODE_PRIVATE);
}
public void setState(boolean bool){
Editor e = sp.edit();
e.putBoolean(isSilentRinger, bool);
e.commit();
}
public boolean isSilentRinger(){
return sp.getBoolean(isSilentRinger, false);
}
}
다음은 최근 위치를 캐싱하는 코드입니다.
public class locationCaching {
private static final String MY_DB="my_db";
private static final String lati = "latitudeCache";
private static final String longi = "longitudeCahe";
LocationManager locationManager;
Location lastKnownLocation;
SharedPreferences sp;
locationCaching(ContextWrapper cw) {
locationManager = (LocationManager)cw.getSystemService(Context.LOCATION_SERVICE);
lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
float lat = (float) lastKnownLocation.getLatitude();
float lon = (float)lastKnownLocation.getLongitude();
sp = cw.getSharedPreferences(MY_DB, Context.MODE_PRIVATE);
Editor e = sp.edit();
e.putFloat(lati, lat);
e.putFloat(longi, lon);
e.commit();
}
}
'Android' 카테고리의 다른 글
안드로이드 푸시 기능 구현 (1) - 구글 개발자 콘솔 프로젝트 생성 (0) | 2015.01.09 |
---|---|
[Android] SQLite 쿼리 (0) | 2014.12.18 |
[Android] 안드로이드에서의 Observer (0) | 2014.12.13 |
[Android] 안드로이드에서의 구조체 (0) | 2014.12.12 |
[android] TextView 글자 흐름 (0) | 2013.06.25 |
댓글