펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO



LG단말같은 경우 디스플레이 내부에 소프트키(뒤로가기,메뉴,홈 등)가 존재한다.

이 경우 해상도를 따로 처리해줘야하는 경우가 있기에 찾아본 방법이다.


boolean hasMenuKey = ViewConfiguration.get(this).hasPermanentMenuKey();
boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
if(!hasMenuKey && !hasBackKey) {
     Log.e("","no hasMenuKey");
} else {
     Log.e("","hasMenuKey"+hasMenuKey+" " +hasBackKey);
}



출처 : http://stackoverflow.com/questions/16092431/check-for-navigation-bar

펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO


이미지 크기를 절대값으로 주고 여러 단말에서 확인을 해 보면, 단말 해상도에 따라 이미지 크기가


제각각인 경우가 있다.


애초에 이미지를 선언할 때 xml에서 dp로 줘버리면 상관이 없겠지만(drawable 폴더에 제대로 분기했다는 가정 하에),


소스코드상에서 비트맵을 만들고, 그 이미지를 뿌리는 경우 참 애매하다.


이때 해상도별로 사이즈 설정을 통일되게 하는 방법에 대해 알아보자.


예를들어Height1280px인 단말기에서 알맞은 이미지 width28px, height28px 일 때,


이보다 높거나 낮은 해상도에서 그에 맞는 사이즈로 리사이징을 하기 위한 방법이다.


먼저 단말의 해상도를 구해야한다.


Drawable d = getResources().getDrawable(id);

DisplayMetrics displayMetrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

float deviceHeight = displayMetrics.heightPixels;


이렇게하면 deviceHeight 에는 단말의 Height 사이즈가 리턴된다.

(어떤 단말에서는 1280, 어떤 단말에서는 2500몇 .. 이런식으로)


int dp = (int) (28 * (deviceHeight / 1280));


여기서 281280은 위에서 예시를 든것과 같이


1280px의 해상도 단말에서 알맞게 표시되는 이미지 크기 28px을 뜻한다.


이렇게 하면 단말 해상도가 커지거나 작아져도 dp값이 그에 따라 커지고 작아져서


모든 단말에서 알맞은 사이즈로 이미지가 표시된다.


디테일을 요구하는 작업에서는 다른 필터링이 추가되어야하겠지만, 일반적인범위 내에서는


위 방법을 이용하면 사이즈가 알맞게 잘 표시가 되었다.




펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO


이 포스팅에서 다루게 될 내용 :

1. Wi-Fi 주파수 추출법

2. 주파수에 다른 채널값 추출법




위 표는 IEEE 802.11b/g/n 2.4GHz 방식과 IEEE 802.11a/n 5GHz 방식의 표준을 나타낸 표이다.


쉽게 말해 일반적으로 말하는 2.4G 대역 와이파이와 5G 대역 와이파이의 주파수와 채널에 대한 정보이다.


먼저 연결된 Wi-Fi의 주파수를 검출하는 방법에 대해 알아보자.


주파수는 WifiManager를 이용하여 와이파이 스캔을 실시하고, 이 결과를 이용하여 추출하게 되는데 방법은 아래와 같다.


WifiManager mWM = (WifiManager) context.getSystemService(WIFI_SERVICE);

WifiInfo wifiInfo = mWM.getConnectionInfo();


try {

for (ScanResult scanResult : mWM.getScanResults()) {

if (wifiInfo != null && wifiInfo.getBSSID() != null

&& wifiInfo.getBSSID().equals(scanResult.BSSID)) {


mCurrentFrequency = scanResult.frequency;

break;

}

}

} catch (Exception e) {


}


주변 Wifi를 스캔하여 현재 연결된 WifiBSSID와 일치하는 와이파이의 주파수를 추출하고 있다.


이렇게 추출된 주파수와 채널값에는 일정한 규칙이 있다.


이 규칙을 공식으로 만들어 채널값을 계산할 수 있다.


방법은 아래와 같다.


public static int convertFrequencyToChannel(int freq) {

if(freq >= 2412 && freq <= 2484) {

if (freq == 2484)

return (freq-2412) /5;

return (freq-2412) /5 + 1;

}else if( freq >= 5170 && freq <= 5825) {

return (freq-5170) /5 + 34;

}

else {

return -1;

}

}


해당 계산식을 적용하면 표에 나와있는 채널값과 동일한 값이 얻어지는것을 확인 할 수 있다.


범위 확인중인 주파수 영역을 벗어나는 새로운 주파수가 추가된다면 소스코드의 수정이 필요할 수 있다.