=================================
=================================
=================================
출처: http://journae.springnote.com/pages/5947591
안드로이드 개발을 하게 되다 보면
너무 다양한 디바이스에 대해서 서로 다른 설정을 해 줄 필요도 있게 되겠죠.
간단하게 디바이스 정보를 확인하는 방법 입니다.
view source
print?
01.import android.os.Build;
02.
03.Log.i("BOARD", Build.BOARD);
04.Log.i("BRAND", Build.BRAND);
05.Log.i("CPU_ABI", Build.CPU_ABI);
06.Log.i("DEVICE", Build.DEVICE);
07.Log.i("DISPLAY", Build.DISPLAY);
08.Log.i("FINGERPRINT", Build.FINGERPRINT);
09.Log.i("HOST", Build.HOST);
10.Log.i("ID", Build.ID);
11.Log.i("MANUFACTURER", Build.MANUFACTURER);
12.Log.i("MODEL", Build.MODEL);
13.Log.i("PRODUCT", Build.PRODUCT);
14.Log.i("TAGS", Build.TAGS);
15.Log.i("TYPE", Build.TYPE);
16.Log.i("USER", Build.USER);
해상도, 사이즈 관련
출처: http://www.androidpub.com/60447
안드로이드에서 폴더명에 명시된 해상도, 지역, 터치 등에 따라서
리소스가 자동으로 로딩 됨은 이미 알고 있습니다.
예제) /res/values-land-400x240, /res/values-land-800x480, /res/values-port-800x480
그런데 이런 과정은 단지 해상도 별로 값만을 분기 하게 됩니다.
하지만 저는 코드 상에서 해상도의 값을 구해서 해상도 별로 동작을 구분 지으려고 합니다.
물론 각각의 해상도별 리소스에 구분 값을 넣을 수도 있으나 이는 여러 모로 차선책 으로 보입니다.
제가 생각하는 것은 win32등에서 사용되는 아래의 함수들
처럼 화면의 가로와 세로 값을 구하고 싶습니다.
GetSystemMetrics(SM_CXSCREEN); // 가로 해상도
GetSystemMetrics(SM_CYSCREEN); // 세로 해상도
이에 안드로이드에서는 어떤 클래스가 제공되는지
샘플 코드는 어떻게 되는 지 알고 싶습니다.
import android.util.DisplayMetrics;
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int deviceWidth = displayMetrics.widthPixels;
int deviceHeight =displayMetrics.heightPixels;
//--------
출처: http://devbible.tistory.com/92
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int deviceWidth = displayMetrics.widthPixels;
int deviceHeight =displayMetrics.heightPixels;
//--------
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int displayWidth = display.getWidth();
int displayHeight = display.getHeight();
int displayOrientation = display.getOrientation();
int displayPixelFormat = display.getPixelFormat();
float displayRefreshRate = display.getRefreshRate();
System.out.println("displayWidth : " + displayWidth);
System.out.println("displayHeight : " + displayHeight);
System.out.println("displayOrientation : " + displayOrientation);
System.out.println("displayPixelFormat : " + displayPixelFormat);
System.out.println("displayRefreshRate : " + displayRefreshRate);
// 결과
// displayWidth : 240
// displayHeight : 400
// displayOrientation : 0 //0:세로, 1: 가로
// displayPixelFormat : 4 // ??
// displayRefreshRate : 60.0
=================================
=================================
=================================
출처: http://v.daum.net/link/8460861
final float scale = getContext().getResources().getDisplayMetrics().density;
// 스케일 곱해서 처리
canvas.drawLine(StartX * scale, StartY * scale, StopX * scale, StopY * scale, pnt);
// 터치 이벤트
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// 선택 위치
int selX;
int selY;
selX = (int) event.getX();
selY = (int) event.getY();
if (selY >= (int)(20 * scale) && selY <= (int)(60 * scale)) {
// ... 생략 ...
정확히 할려면 가로 세로 해상도 따로 요런식으로 구해서 쓰시면 될꺼 같습니다..
final float hPixel = getContext().getResources().getDisplayMetrics().heightPixels;
final float wPixel = getContext().getResources().getDisplayMetrics().widthPixels;
삽질(?)하면서 얻은거라 좋은 방법인지는 모르겠네요 ^^;;;;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
참고 하시길..
DisplayMetrics metrics = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(metrics);
Log.d("test", "density=" + metrics.density);
Log.d("test", "densityDpi=" + metrics.densityDpi);
Log.d("test", "scaledDensity=" + metrics.scaledDensity);
Log.d("test", "widthPixels=" + metrics.widthPixels);
Log.d("test", "heightPixels=" + metrics.heightPixels);
Log.d("test", "xDpi=" + metrics.xdpi);
Log.d("test", "yDpi=" + metrics.ydpi);
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
이건 어떤지요..
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Log.d("display", "w:" + display.getWidth());
Log.d("display", "h:" + display.getHeight());
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
android.view.Display displays = ((WindowManager) getApplicationContext().getSystemService(getApplicationContext().WINDOW_SERVICE)).getDefaultDisplay();
Log.d("display2", "w:" + displays.getWidth());
Log.d("display2", "h:" + displays.getHeight());
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
하나하랑
import android.view.WindowManager;
import android.util.DisplayMetrics;
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
dm.widthPixels
dm.heightPixels
<<--이렇게 사용도 가능하다능....
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
=================================
=================================
=================================
출처: http://blog.naver.com/PostView.nhn?blogId=dualwield&logNo=100094916758&viewDate=¤tPage=1&listtype=0
ps. 좀더 자세한 것은 아래 링크 참고하세요
http://developer.android.com/guide/practices/screens_support.html
추가적으로, res/layout-480x800 , res/drawable-480x800 와 같이 사용해도 된다고 하네요.
현재 해상도 구하는 것은
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
View에서는 아래 것으로 사용하면 된다. ( context 만 구할 수 있는 곳이면 어디든~! )
int mWidth = context.getResources().getDisplayMetrics().widthPixels;
int mHeight = context.getResources().getDisplayMetrics().heightPixels;
-> 위의 내용은 아래와 같이 사용하시면 된다는 의미에요~^^ 질문하시는 분이 계셔서 살짝 추가합니다.
int mWidth = getContext().getResources().getDisplayMetrics().widthPixels;
int mHeight = getContext().getResources().getDisplayMetrics().heightPixels;
=================================
=================================
=================================
출처: http://theeye.pe.kr/entry/how-to-get-my-devices-extra-information
안드로이드는 아이폰과 달리 기기마다 특성이 다르고 덕분에 어떤 디바이스에서는 잘 되는데 어떤 디바이스에서는 잘안되고 이런 문제가 허다하더군요. 이 문제를 어떻게 해결하지 못하면 앞으로 디바이스 종류는 더 다양해 질텐데 개발자들의 한숨만 늘어날수도 있겠습니다.
아무튼 다양한 디바이스에서 잘 돌아가게 만드는것이 중요한데 개발을 하다보면 한계에 봉착합니다. 무엇이냐면 어떤 디바이스에서는 죽어도 안되는 경우입니다. 아니면 아예 다른 방법으로 접근해야 간신히 문제가 해결되는 독특한 디바이스들이 있습니다. 이경우 어떻게 해야 할까요.
물론 디바이스의 이름을 알아내서 이때만 예외처리를 하는 방법도 있겠습니다. 비참하지만 능력 부족의 한계ㅠㅠ 아무튼 이런 경우에 디바이스에서 어떤 정보를 가져올 수 있는지 확인해 보았습니다. Build라는 클래스의 정보들을 읽어보시면 원하는 정보를 얻어올 수 있습니다.
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);
}
}
위는 시뮬레이터에서 실행한 결과입니다. 시뮬레이터의 정보들을 확인해 보실 수 있습니다.
위는 디자이어에서 실행해본 결과입니다. 곳곳에서 보이는 bravo를 보니 아무래도 디자이어의 코드명은 브라보가 아니었을까 하는 생각이 드는군요.
=================================
=================================
=================================
그외 좋은 사이트:
http://theeye.pe.kr/entry/how-to-get-my-devices-extra-information
http://www.androidpub.com/700646
http://v.daum.net/link/8460861
해상도 참고 사이트:
기기 정보들
http://blog.naver.com/PostView.nhn?blogId=liehacker&logNo=130113254554
http://www.kandroid.org/guide/practices/screens_support.html
=================================
=================================
=================================
'스마트기기개발관련 > 안드로이드 개발' 카테고리의 다른 글
안드로이드 동영상 재생 관련 (0) | 2020.09.18 |
---|---|
안드로이드 타이머 구현 관련 (0) | 2020.09.18 |
안드로이드 - 프로젝트 생성시 기본 폴더 구조와 설명 (0) | 2020.09.18 |
안드로이드 xml 안쓰고 UI 코딩하기 (0) | 2020.09.18 |
[android] 안드로이드 64비트 개발 정책, 빌드 관련 (0) | 2019.09.18 |