안드로이드

스마트폰에서 실행할것

 

 

 

 

 

 

 

 

 

 

 

 

 

 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강

 

 

 

android

 

about author

PHRASE

Level 60  머나먼나라

이상적인 남자는 남자의 강인함과 여자의 부드러움을 함께 갖고 있다. -탈무드-

댓글 ( 4)

댓글 남기기

작성