543
No
스마트폰에서 실행할것
1. 강의 프로젝트 - MyLocation
class MainActivity
package kr.co.braverokmc.location;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView textView1, textView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1 = (TextView) findViewById(R.id.textView1);
textView2 = (TextView) findViewById(R.id.textView2);
}
public void onClick(View v) {
//내장된 위치 참조
LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//ex) 10초마다 업데이트
long minTime = 10000;
//자신이 움직였을 거리의 차이
//0이면 항상 업데이트를 한다.
float minDistance = 0;
MyLocationListenre listener = new MyLocationListenre();
//위치 정보 권한 풍선말 생겼을 시 자동 체크 자동 체크
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
//requestLocationUpdates 나의 위치정보를 업데이트를 해서 가져오는 것으로
// 위성 에서 가져오기때문에 시간차가 크다
//위 if 문은 풍선말 선택시 자동 셋팅 된다.
// 또한 AndroidMainfest 에서 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
// 자동 설정 된다.
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
minTime, minDistance, listener);
// 기지국 기반으로 위치를 알아낸다.
manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
minTime, minDistance, listener);
// 위성 GPS 또는 기지국이든 둘중 하나 선택해서 자동을 위치를 알아낸다.
//GPS 를 통해서 알았던 좌표중에서 가장 최근의 좌표를 가져온다.
Location location =manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(location!=null){
Double latitude = location.getLatitude();
Double longitude = location.getLongitude();
// textView1.setText( "가장 최근의 내 위치 : "+ latitude + ", " + longitude);
//텍스트 뷰에 변경이 있으면 업데이트
// textView1.invalidate();
}
}
// LocationManager 가 위치정보를 알려줄때 MyLocationListenre 의 메소드를
// 호출해 주면서 Location 객체를 던져 주는 역할을 한다.
class MyLocationListenre implements LocationListener{
Double latitude2, longitude2;
@Override
public void onLocationChanged(Location location) {
latitude2 = location.getLatitude();
longitude2 = location.getLongitude();
textView2.setText( "나의 위치 : "+ latitude2 + ", " + longitude2);
//텍스트 뷰에 변경이 있으면 업데이트
textView2.invalidate();
/* textView2.setText( "나의 위치 : "+ latitude + ", " + longitude);
//텍스트 뷰에 변경이 있으면 업데이트
textView2.invalidate();*/
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
}
}
R.layout.activity_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="kr.co.braverokmc.location.MainActivity">
<Button
android:text="내위치 확인하기"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="119dp"
android:layout_marginStart="119dp"
android:id="@+id/button"
android:onClick="onClick"
android:textColor="@android:color/background_light"
android:background="@android:color/holo_orange_dark" />
<TextView
android:layout_marginBottom="10dp"
android:text="위치좌표"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="22dp"
android:id="@+id/textView1"
android:layout_below="@+id/button"
android:layout_centerVertical="true"
android:textAlignment="center"
android:gravity="center_vertical" />
<TextView
android:gravity="center_vertical"
android:text="위치좌표"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="22dp"
android:id="@+id/textView2"
android:layout_below="@+id/textView1"
android:textAlignment="center" />
</RelativeLayout>
AndroidMainfest.xml
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
2. 교제 프로젝트 - SampleLocation
class MainActivity
package org.androidtown.lbs.location;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
/**
* 위치 관리자를 이용해 내 위치를 확인하는 방법에 대해 알 수 있습니다.
*
* @author Mike
*
*/
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 버튼 이벤트 처리
Button button01 = (Button) findViewById(R.id.button01);
button01.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// 위치 정보 확인을 위해 정의한 메소드 호출
startLocationService();
}
});
}
/**
* 위치 정보 확인을 위해 정의한 메소드
*/
private void startLocationService() {
// 위치 관리자 객체 참조
LocationManager manager =
(LocationManager) getSystemService(Context.LOCATION_SERVICE);
// 위치 정보를 받을 리스너 생성
GPSListener gpsListener = new GPSListener();
long minTime = 10000;
float minDistance = 0;
// GPS를 이용한 위치 요청
manager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
minTime,
minDistance,
gpsListener);
// 네트워크를 이용한 위치 요청
manager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
minTime,
minDistance,
gpsListener);
// 위치 확인이 안되는 경우에도 최근에 확인된 위치 정보 먼저 확인
try {
Location lastLocation = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (lastLocation != null) {
Double latitude = lastLocation.getLatitude();
Double longitude = lastLocation.getLongitude();
Toast.makeText(getApplicationContext(), "Last Known Location : " + "Latitude : "
+ latitude + "\nLongitude:" + longitude, Toast.LENGTH_LONG).show();
}
} catch(Exception ex) {
ex.printStackTrace();
}
Toast.makeText(getApplicationContext(),
"위치 확인이 시작되었습니다. 로그를 확인하세요.", Toast.LENGTH_SHORT).show();
}
/**
* 리스너 클래스 정의
*/
private class GPSListener implements LocationListener {
/**
* 위치 정보가 확인될 때 자동 호출되는 메소드
*/
public void onLocationChanged(Location location) {
Double latitude = location.getLatitude();
Double longitude = location.getLongitude();
String msg = "Latitude : "+ latitude + "\nLongitude:"+ longitude;
Log.i("GPSListener", msg);
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
R.layout.activity_main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="위치 확인 시작" />
</RelativeLayout>
AndroidMainfest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
119강
120강
댓글 ( 4)
댓글 남기기