728x90

일반적으로 안드로이드 폰에서 위치정보를 얻는 방법은 크게 3가지

1) GPS - 위성에서 정보를 받아 삼각측량으로 위치를 계산, 정확하다, 건물 안에서는 안된다

2) 3G망 - 인접된 전화기지국에서오는 전파의 시간 차이로 위치를 계산, 실내에서도 가능

3) WiFi 의 AP

 

 

 

 

1. 위치제공자 확인법

 1) AndroidManifest.xml - 권한설정

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

 2) 시스템으로부터 LocationManager 객체 얻어오기

 3) getAllProviders() 메소드로 위치제공자 리스트 가져오기

// 1. 위치관리자 객체 생성
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

// 2. 위치제공자 모두 가져오기
List<String> list = lm.getAllProviders(); 


for (int i = 0; i < list.size(); i++) {
 // 위치제공자
 	list.get(i);
 // 해당 제공자 사용가능 boolean 
    lm.isProviderEnabled(list.get(i));
}

/**안드로이드 위치 제공자 관련 상수**/

public static final String GPS_PROVIDER = "gps"
public static final String NETWORK_PROVIDER = "network"
public static final String PASSIVE_PROVIDER = "passive"

 

2. Criteria

// 1. 위치관리자 객체 생성
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

//2. Criteria 객체 생성(프로바이더의 상세 속성 옵션)
Criteria criteria = new Criteria();
criteria.set(Criteria.ACCURACY_FINE); //위도와 경도에 정확도(정밀도) 설정
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setPowerRequirement(Criteria.POWER_HIGH);
criteria.setAltitudeRequired(false);
criteria.setSpeedRequired(true);
criteria.setCostAllowed(true);
criteria.setBearingRequired(false);



//3. criteria의 옵션에 해당하는, 현재 위치값을 가져오기 위한 프로바이더
private String bestProvide = locationManager.getBestProvider(criteria, true);

 

4. 위치 정보 취득시의 콜백 - onLocationChanged

//GPS Update 시간은 1초 이상, 반경은 10m 이상이 좋음
//(GPS 송수신하는데 준비 과정에서만 약 1초가 소요 된다고 함)
    
if(!locationManager.isProviderEnabled(provider)
        &&locationManager.getLastKnownLocation(provider)!=null) {

	locationManager.requestLocationUpdates(provider, 1000, 10, this);
    
 }else{

    criteria.setAccuracy(Criteria.ACCURACY_COARSE);
    provider = locationManager.getBestProvider(criteria, true);
    locationManager.requestLocationUpdates(provider, 1000, 10, this);
 
 }

@Override
public void onLocationChanged(Location location) {
// GPS 변경에 따른 코딩 구현.

}

 

 

 

Reference

 

https://developer.android.com/reference/android/location/LocationManager 

 

LocationManager  |  Android Developers

LocationManager public class LocationManager extends Object java.lang.Object    ↳ android.location.LocationManager This class provides access to the system location services. These services allow applications to obtain periodic updates of the device's geog

developer.android.com

https://bitsoul.tistory.com/130

 

안드로이드: 위치제공자 LocationManager 예제 - 현재폰에 제공되는 위치제공자 확인

안드로이드: 위치제공자 LocationManager 예제 - 현재폰에 제공되는 위치제공자 확인 안드로이드를 사용하여 위치기반 앱을 만들때, 현재 톤에 제공되는 위치 제공자 들이 어떠한 것들이 있는지 확인해봐야 합니다..

bitsoul.tistory.com

https://pluu.github.io/blog/android/droidkaigi/2017/12/30/droidkaigi-location/

 

Pluu Dev - [번역] DroidKaigi 2017 ~ 위치 정보를 정확하게 트래킹하는 기술

Emulator 29.2.2 Canary에서 Location 사용하기 Posted on 28 Sep 2019 [요약] Demystifying Android Accessibility Development (Google I/O '19) Posted on 23 Sep 2019 Android Studio Tips #2 Posted on 24 Jul 2019 Android Studio Tips #1 Posted on 13 Jul 2019

pluu.github.io

 https://gogorchg.tistory.com/entry/Android-실시간-GPS-사용

 

[Android] 실시간 GPS 사용

실시간으로 위치 추적을 할 때, 여러 Test와 조사 결과 다음과 같이 나왔다. 1. 강제적으로 Update를 시키지 말고, LocationListener를 통하여 받도록 하자. 2. GPS Update 시간은 1초 이상, 반경은 10m 이상이 좋..

gogorchg.tistory.com

 

728x90
728x90

 

안녕하세요. 모바일 게임 리뷰 4번째, 이번엔 '신의연대기'를 들고 왔습니다.

 

해당 게임은 GP데브(GP Dev)가 개발해서 withHUG로 배급되는거 같은데요.

 

 

개발사 뿐만 아니라 게임의 공식홈페이지가 없어서 정보를 알기가 어렵네요. 

운영진 Q&A에 따르면, 헝그리앱이란 사이트에서 '신의 연대기' 공식게시판이 있나봅니다.

http://www.hungryapp.co.kr/bbs/list.php?bcode=godchronicle

 

 

 

신의 연대기 사전예약 프로모션 영상

 

 

해당 게임은 전형적인 양산형 게임입니다. 

캡쳐하고 보니, 얼마 전에 보스레이브 리뷰를 했을때의 캡쳐와 거의 흡사하네요.

차이점은 보스레이브가 중국무협풍이라면, 이건 유럽식 판타지쪽이란 것?

 

2019/09/02 - [Game/Mobile] - [모바일 게임 리뷰] Bosslave 보스레이브 - 청하가 모델이라 해봤는데...

 

 

직업은 워리어, 매지션, 아처 3가지로 나뉩니다.

 

 

우선 매지션으로 해봤는데요. 이 게임, 배경은 서양식인데, 메뉴 번역이나 그래픽이 중국산같네요 ㅋㅋㅋ

 

 

정말 5분만 게임을 했는데, 자동전투해놓고 정신 차려보니 레벨이 40이 되어있었습니다. 

전형적인 양산형 게임에, 현질하면 빨리 레벨 오른다며 이곳저곳에 돈독 올라있는게 보이네요.

이거 솔직히 그래픽도 별로라, 어차피 양산형 게임을 할 거면 차라리 보스레이브를 하는게 더 나을거 같단 생각까지 들더라구요 ㅋㅋ... 저에겐 정말 별로였습니다. 그럼에도 설치하고 플레이를 해봤단 것 때문에 리뷰는 썼네요. 

 

728x90
728x90

SurfaceView View를 상속받은 클래스로 Video Memory로 바로 접근하기 때문에 일반 View에서의 랜더링 

속도보다 빠르다.

일반 View는 많은 그리기 작업을 하면 메인 스레드의 자원을 다 잡아먹어버리기때문에 상당히 느려지게 되는데

이러한 단점을 보완하기 위한 클래스라고 보면 된다

 

 

SurfaceView로부터 상속받을 경우 디폴트로 구현해야 할 메소드가 있다.

 

  • public void onDraw (Canvas canvas) : 화면을 그린다.
  • public void surfaceChanged() : 뷰가 변경될 때 호출된다.
  • public void surfaceCreated() : 뷰가 생성될 때 호출된다.
  • public void surfaceDestroyed() : 뷰가 종료될 때 호출된다.

 

그럼 셋팅은 끝. 사용되는건 surfaceCreated surfaceDestoryed 정도가 되겠다.

surfaceCreated는 처음 서피스뷰가 생성될 때 호출되는데, 주의할점은 백그라운드 상태로 내려갔다가, 다시 올라오게 되면

surfaceview가 다시 created된다는점이다. created에서 thread를 실행시키는 작업을 할 경우

반드시 스레드가 동작중인지 여부를 먼저 확인해야한다. 그렇지않으면 익셉션 발생

 

surfaceChanged는 업데이트를 대비해 만들었다, 뭐라뭐라 하던데 잘 모르겠다. 사용하지않는듯하다.

 

이제 SurfaceView 구성은 하였고, 실시간으로 그리기를 실행하려면 Thread를 구동해야한다.

 

private Class PaintThread extends Thread {

public void run() {

while(!this.isInterrupted()){    //스레드가 인터럽트 될 때까지 반복 실행.

if (그리기 실행조건) {

//그리기 실행

doDraw();

}

}

}

}


Reference

- https://biig.tistory.com/23

 

SurfaceView 구현 / 사용법

SurfaceView는 View를 상속받은 클래스로 Video Memory로 바로 접근하기 때문에 일반 View에서의 랜더링 속도보다 빠르다. 일반 View는 많은 그리기 작업을 하면 메인 스레드의 자원을 다 잡아먹어버리기때문에 상..

biig.tistory.com

https://blog.naver.com/muri1004/221054311714

 

[Android] SurfaceView 개념 및 예제

SurfaceView 란?SurfaceView는 View를 상속받는 클래스이다.일반 View는 onDraw 메소드를 시스템에...

blog.naver.com

 

728x90
728x90

 

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

 

AndroidX Migration을 진행한 후에,

위와 같은 binding 부분에서 에러가 발생할 경우가 간혹 있다.

빨간줄에 에러를 확인해보면 ' Type parameter T has incompatible upper bounds : ViewDataBinding ~' 이런건데,

 

Build -> Clean Project
Build -> Rebuild Project

File -> Invalidate Caches/Restart...

귀찮아도 이 단계를 거치고 프로젝트를 다시 시작하면 해결 된다.

 

 

 

Reference

https://stackoverflow.com/questions/34368329/data-binding-android-type-parameter-t-has-incompatible-upper-bounds-viewdata

 

Data Binding Android - Type parameter T has incompatible upper bounds : ViewDataBinding and MainActivity

I am using Android Studio 2.0 Preview 4. I'm using Android SDK tools 25 rc1. This error persists no matter how many times I clean / rebuild project. File->Invalidate Caches and restart also doesn't...

stackoverflow.com

 

728x90

+ Recent posts