안드로이드가 스크린 크기가 다양합니다.
그래도 dip를 사용해서는 다양한 크기에 대응할 수 있는 화면을 만들 수 있지만
개발을 하다보니 스킨을 사용할 때 약간의 크기에 따라서 다른 스킨을 사용할 일이 생기더군요
그래서... 현재 스크린의 크기를 구할 수 있는 방법을 적어 봅니다.

Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

int displayWidth = display.getWidth();
int displayHeight = display.getHeight();

이렇게 사용하면 혀재의 화면 크기를 구할 수 있습니다.
Display객체 안에 다른 내용도 많으니 그에 대한 자세한 내용은
http://developer.android.com/reference/android/view/Display.html
이곳에 가면 확인하실 수 있습니다.



ImageButton에 효과 주기
에 대한 제 블로그 글에 어떤 분이 어떻게 하시는지 잘 모르겠다고 하셔서...
그냥 간단하게 예제를 만들어서 올립니다...
머... 그냥 단순합니다...
이거라도 도움이 되었으면 하고 이렇게 따로 하나 적어봅니다. :)

drawable 폴더에 있는 xml파일을 잘 활용하는 것이 중요할 것 같습니다. :)




소리바다 안드로이드 앱 1.0을 오픈했습니다.
그동안 말도많고... 고생도 좀 하고 ㅜㅜ// 어이없는 모토로이 녀석때문에
시간도 쓸대없이 3주 허비하고... ㅎㅎㅎ
회사에서 안드로이드보단 아이폰에 더 관심을 갖고 있고... <- 이건 좀 ... 서운한 감정이 들더군요
그래도 이제 만들어서 내놓았습니다.

 
머.. 베타 테스트 할 때 보다야... 좀 좋아지기도 했고...
앞으로 트위터 연동하는거랑... 뮤직비디오 볼 수 있게 업데이트 해야 겠습니다..
다운로드 서비스 정책 나오면 그것도 만들고 ^^
안드로이드폰 이용하시는 분들... 사용해 보세요 :)


안드로이드의 WebView에서는 웹페이지에서의 경고창 보이는 것에 대해서
코드로 만들어 둬야 하는 단점이 있습니다.
안해둘 수도 없고... 그래도 간단하게 해결되게 되어 있네요.

예제코드

final WebView browser = (WebView)findViewById(/*WebView의 ID*/);
browser.getSettings().setJavaScriptEnabled(true);  //javascript 사용 가능하게 한다
final Context myApp = this;

browser.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result)
    {
        new AlertDialog.Builder(myApp)
            .setTitle("AlertDialog")
            .setMessage(message)
            .setPositiveButton(android.R.string.ok,
                    new AlertDialog.OnClickListener()
                    {
                        public void onClick(DialogInterface dialog, int which)
                        {
                            result.confirm();
                        }
                    })
            .setCancelable(false)
            .create()
            .show();

        return true;
    };
});

browser.loadUrl(/*웹 페이지 주소*/);

이런식으로 사용하면 됩니다.




동영상을 보게 되면 아이폰 안에서 안드로이드가 실행중입니다.
아이폰에서 멀티부팅??을 이용하여 리눅스를 설치하고, 안드로이드를 넣어버린...
예전에 아이폰에다가 Win98을 설치한 건 보았었는데 ㅎㅎ 안드로이드를...
보니까... 전화까지 받아지는거 같던데 음... 이런식으로 사용해 보는 사람들이 생겨나겠군요 ㅋㅋ
제가 가지고 iPod에 설치해 보고 싶어지는 ^^
아래 주소는 아이폰 멀티부팅을 도와주는 자료가 있는 곳 입니다.
http://www.theiphonewiki.com/wiki/index.php?title=IBoot





말도 많고...
그동안 문제도 생겼던... ㅜㅜ/
아..그래도 이제 거의다 완성이 되가는 ㅋㅋ
과연 내일 베타테스트를 진행할 수 있을런지.. 음...


안드로이드 개발을 하게 되다 보면
너무 다양한 디바이스에 대해서 서로 다른 설정을 해 줄 필요도 있게 되겠죠.
간단하게 디바이스 정보를 확인하는 방법 입니다.


import android.os.Build;

Log.i("BOARD", Build.BOARD);
Log.i("BRAND", Build.BRAND);
Log.i("CPU_ABI", Build.CPU_ABI);
Log.i("DEVICE", Build.DEVICE);
Log.i("DISPLAY", Build.DISPLAY);
Log.i("FINGERPRINT", Build.FINGERPRINT);
Log.i("HOST", Build.HOST);
Log.i("ID", Build.ID);
Log.i("MANUFACTURER", Build.MANUFACTURER);
Log.i("MODEL", Build.MODEL);
Log.i("PRODUCT", Build.PRODUCT);
Log.i("TAGS", Build.TAGS);
Log.i("TYPE", Build.TYPE);
Log.i("USER", Build.USER);



  안드로이드의 특징중에 하나를 꼽는다면 백그라운드 실행이라고 할 수 있겠습니다. 아이폰과 다르게 멀티테스킹이 가능한
안드로이드는 그만큼 활용도가 많다는 것입니다. 하지만 그것에 따른 다른 주의 사항이 있습니다.
그 중에 하나가 바로 wifi모드를 유지하는 것입니다.

  안드로이드는 대기 모드로 들어가게 되면 배터리 소모를 줄이기 위해서 wifi를 자동으로 꺼버리게 됩니다. 하지만 무선으로
데이터를 주고 받는 중이거나, 스티리밍을 하고 있는 중간에 대기 상태로 들어가게 되고 자동으로 wifi가 꺼지게 된다면 3G
의 무선 데이터 모드로 바뀌게 되겠지요. 그렇게 된다면 3G 데이터의 사용이 많아지게 되고 나중엔 사용자의 요금에 지대한
영향을 줄 것으로 생각됩니다.
  백그라운드 실행 중에도 wifi 상태를 유지하기 위해서는 

android.net.wifi.WifiManager.WifiLock

을 이용해서 wifi상태를 유지시켜줘야 합니다.
자세한 설명음
http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html
이 곳에 가시면 확인할 수 있습니다.

간단히 사용방법을 보게 된다면
WifiManager.WifiLock wifiLock = null;
//등록
if (wifiLock == null) {
                WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
	wifiLock = wifiManager.createWifiLock("wifilock");
	wifiLock.setReferenceCounted(true);
	wifiLock.acquire();
}
//해제
if (wifiLock != null) {
                wifiLock.release();
	wifiLock = null;
}

이렇게 하면 됩니다.
대기 상태에서도 wifi를 유지하고 있게 된다면, 배터리 소모가 빠르고 많아진다는 단점이 있지만, 그만큼 3G 데이터를 사용하는것이 적어진다는 것에 대한 장점도 있게 됩니다.

  두번째로 주의할 점은, 대기상태가 오래 된다면 cpu의 활동을 정지시켜 버립니다. 이것도 배터리 소모를 줄이기 위한 것이기는 하지만, 단적인 예로 들어서 스트리밍으로 음악을 듣고 있는 중에서 화면을 꺼버린 대기 모드일 경우에 cpu를 정지 시킨다면 음악을 들을 수 없게 되겠지요. 그래서 wifi상태를 유지 시켜주기 위한 WifiLock이 있듯이 cpu상태를 활동상태로 유지시켜주는 WakeLock이 있습니다.

android.os.PowerManager.WakeLock

자세한 설명은
http://developer.android.com/reference/android/os/PowerManager.WakeLock.html
이곳에 가셔서 확인해 볼 수 있습니다.

이것을 사용하는 방법은 간단히
PowerManager.WakeLock wakeLock = null;
//등록
if (wakeLock == null) {
	PowerManager powerManager = (PowerManager) context.getSystemService(context.POWER_SERVICE);
	wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "wakelock");
	wakeLock.acquire();
}
//해제
if (wakeLock != null) {
	wakeLock.release();
	wakeLock = null;
}

이렇게 하면 됩니다.

이 두가지를 유지시켜 준다면, 백그라운드로 실행을 하면서 대기 모드로 전환이 된다고 해도, 해당 어플이 죽거나 하는 일은 없겠지만, 그만큼 배터리 소모가 많아지기 때문에 안드로이드폰을 오래 사용할 수는 없겠지요.


+ Recent posts