Tag Archives: 안드로이드

[Android] 디바이스의 고유 정보값 얻어오기

안드로이드는 아이폰과 달리 기기마다 특성이 다르고 덕분에 어떤 디바이스에서는 잘 되는데 어떤 디바이스에서는 잘안되고 이런 문제가 허다하더군요. 이 문제를 어떻게 해결하지 못하면 앞으로 디바이스 종류는 더 다양해 질텐데 개발자들의 한숨만 늘어날수도 있겠습니다.

아무튼 다양한 디바이스에서 잘 돌아가게 만드는것이 중요한데 개발을 하다보면 한계에 봉착합니다. 무엇이냐면 어떤 디바이스에서는 죽어도 안되는 경우입니다. 아니면 아예 다른 방법으로 접근해야 간신히 문제가 해결되는 독특한 디바이스들이 있습니다. 이경우 어떻게 해야 할까요.

물론 디바이스의 이름을 알아내서 이때만 예외처리를 하는 방법도 있겠습니다. 비참하지만 능력 부족의 한계ㅠㅠ 아무튼 이런 경우에 디바이스에서 어떤 정보를 가져올 수 있는지 확인해 보았습니다. Build라는 클래스의 정보들을 읽어보시면 원하는 정보를 얻어올 수 있습니다.

[code]package kr.pe.theeye;


import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;


public class ModelNameTest extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        Log.d(“ModelNameTest”, “BOARD: ” + Build.BOARD);
        Log.d(“ModelNameTest”, “BRAND: ” + Build.BRAND);
        Log.d(“ModelNameTest”, “CPU_ABI: ” + Build.CPU_ABI);
        Log.d(“ModelNameTest”, “DEVICE: ” + Build.DEVICE);
        Log.d(“ModelNameTest”, “DISPLAY: ” + Build.DISPLAY);
        Log.d(“ModelNameTest”, “FINGERPRINT: ” + Build.FINGERPRINT);
        Log.d(“ModelNameTest”, “HOST: ” + Build.HOST);
        Log.d(“ModelNameTest”, “ID: ” + Build.ID);
        Log.d(“ModelNameTest”, “MANUFACTURER: ” + Build.MANUFACTURER);
        Log.d(“ModelNameTest”, “MODEL: ” + Build.MODEL);
        Log.d(“ModelNameTest”, “PRODUCT: ” + Build.PRODUCT);
        Log.d(“ModelNameTest”, “TAGS: ” + Build.TAGS);
        Log.d(“ModelNameTest”, “TIME: ” + Build.TIME);
        Log.d(“ModelNameTest”, “TYPE: ” + Build.TYPE);
        Log.d(“ModelNameTest”, “USER: ” + Build.USER);
    }
}[/code]

사용자 삽입 이미지위는 시뮬레이터에서 실행한 결과입니다. 시뮬레이터의 정보들을 확인해 보실 수 있습니다.

사용자 삽입 이미지위는 디자이어에서 실행해본 결과입니다. 곳곳에서 보이는 bravo를 보니 아무래도 디자이어의 코드명은 브라보가 아니었을까 하는 생각이 드는군요.

[Android] WebView 사용시에 쿠키 동기화 문제 해결하기

안드로이드 기반의 WebView를 사용하다 보면 쿠키와 관련 부분의 동작이 조금 이상한 것을 발견하실 수 있습니다. 예를 들자면 로그인을 했는데 사용중에 갑자기 로그인이 풀려버린다거나 로그아웃을 아무리 해도 로그아웃처리가 되지 않는 문제가 있습니다.

이러한 문제는 실제로 어플리케이션이 할당 받은 메모리 영역(RAM)과 전체 쿠기가 보관되는 지역 저장소간의 동기화가 제대로 이루어지지 못하는데서 발생하는 문제입니다. 다음에서 보여드릴 CookieSyncManager를 이용하여 이 문제를 해결할 수 있습니다.

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);         
    setContentView(R.layout.main);
        
    CookieSyncManager.createInstance(this);
}

위와같이 onCreate내에서 싱크를 시작하여 주도록 합시다. 이 명령은 어플리케이션의 가장 Host가 되는 액티비티의 생성시에 호출해 주시면 됩니다. 액티비티마다 매번 호출하실 필요가 없습니다.

@Override
protected void onResume()
{
    super.onResume();
    CookieSyncManager.getInstance().startSync();
}

위의 명령을 onResume() 메서드 안에서 구현해 주도록 합시다.

@Override
protected void onPause()
{
    super.onPause();
    CookieSyncManager.getInstance().stopSync();
}

위의 명령을 onPause() 메서드 안에서 구현해 주도록 합시다. 위와 같은 과정을 통해 어플리케이션이 실행되면 쿠키싱크 매니저의 인스턴스를 생성하고 어플리케이션이 중지 상태로 들어가게 되면 싱크를 중단시켜 외부의 어플리케이션에 의해 쿠키가 꼬이는것을 방지하여 줍니다. 이후에 어플리케이션이 다시 시작되면 쿠키 동기화를 재시작합니다.

실제로 제작했던 어플리케이션의 쿠키 문제가 “정말 아주 간헐적”으로 발생해서 원인을 찾기도 어려웠는데 위와같은 처리를 하고나니 아무런 문제없이 해결이 되었네요.

참고 : http://stackoverflow.com/questions/2566485/webview-and-cookies-on-android