[DSC] 위치기반 서비스와 센서 사용하기

2020. 6. 4. 19:56Android

이번 주는 투표를 받아 위치기반 서비스와 센서 사용하기를 주제로 세션을 진행하겠습니다. :)

 

 

위치기반 서비스는 지상의 위치 정보를 이용해서 휴대 단말 사용자에게 다양한 서비스를 제공합니다. 안드로이드 폰은 GPS와 센서가 기본으로 장착되어 있어 자신의 위치를 확인할 수 있습니다.

 

1. GPS로 나의 위치 확인하기

 안드로이드 기반의 스마트폰 위치는 위치 관리자(LocationManager)라는 시스템 서비스가 관리합니다. 실제로 android.location 패키지에는 이 클래스를 포함하여 위치 정보를 확인하거나 확인된 위치 정보를 사용하는데 필요한 클래스들이 정의되어 있습니다.

 

나의 현재 위치를 확인하는 가장 기본적인 방법은 위치 관리자에게 위치 정보를 요청하는 것입니다. 그러려면 다음과 같은 단계를 거쳐야 합니다.

1. 위치 관리자 객체 참조하기

 위치 관리자(LocationManager)는 시스템 서비스로 제공되므로, getSystemService() 함수를 이용해 위치 관리자 객체를 참조합니다.

 

2. 위치 리스너 구현하기

 위치 관리자가 알려주는 현재 위치는 위치 리스너(LocationListener)를 통해 받게 되므로 새로운 리스너를 구현하여 전달 받은 위치 정보를 처리합니다.

 

3. 위치 정보 업데이트 요청하기

 위치 관리자에게 위치 정보가 변경될 때마다 알려달라고 요청하기 위해 requestLocationUpdate() 함수를 호출합니다. 이 함수의 parameter로 2번에서 구현한 위치 리스너 객체를 전달합니다.

 

4. 매니페스트에 추가하기

 GPS를 사용할 수 있도록 매니페스트 파일에 ACCESS_FINE_LOCATION 권한을 추가하고 위험권한을 위한 설정과 코드를 추가합니다.

 

 

실습을 통해 현재 위치를 나타내보도록 하겠습니다.

프로젝트를 새로 만들고 이름은 Week5로 하겠습니다.

 

 

1. 위치 관리자 객체 참조하기

 

activitiy_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    
    <Button
        android:id="@+id/btn_myLocation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="나의 위치" />
    
</LinearLayout>

 activity_main.xml에서 TextView와 Button을 하나씩 만들어 줍니다. 버튼을 누르면 내 위치 확인을 시작하도록 하고 위치가 확인되면 텍스트뷰에 보여줄 것입니다.

 

 

MainActivity.java

package com.example.week5;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView tv_location;
    Button btn_myLocation;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        tv_location = findViewById(R.id.tv_location);
        btn_myLocation = findViewById(R.id.btn_myLocation);
        btn_myLocation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startLocationService();
            }
        });
    }
    
    public void startLocationService() {
        LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        if (Build.VERSION.SDK_INT >= 23 && 
                ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        Location location = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (location != null) {
            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
            String message = "최근 위치 -> Latitude : " + latitude + "\nLongitude : " + longitude;
            tv_location.setText(message);
        }
    }
}

 똑같이 따라 쓰셨다면 manager.getLastKnownLocation()에서 빨간줄이 떴을거예요. 이는 권한이 없기 때문인데 필요한 권한을 추가하기 위해 AndroidManifest.xml 파일에 코드를 추가해 봅시다.

 

AndroidManifest.xml

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

<appication> 태그 위에 추가하시면 될 것 같습니다.

 

 

2. 위치 리스너 구현하기

 위치 리스너(LocationListener)는 위치 관리자에서 전달하는 위치 정보를 받기 위해 정의된 인터페이스입니다.

위리 관리자가 위치 정보를 전달할 때 호출되므로 위치 정보를 받아 처리하려면 이 리스너의 onLocationChanged() 함수를 구현해야 합니다. MainActivity 클래스 안에 LocationListener 인터페이스를 구현하는 클래스를 내부 클래스로 정의해 보겠습니다.

 

MainActivity.java

    ...
    class GPSListener implements LocationListener {
        @Override
        public void onLocationChanged(Location location) {
            Double latitude = location.getLatitude();
            Double longitude = location.getLongitude();
            String message = "최근 위치 -> Latitude : " + latitude + "\nLongitude : " + longitude;
            tv_location.setText(message);
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {}

        @Override
        public void onProviderEnabled(String provider) {}

        @Override
        public void onProviderDisabled(String provider) {}
    }
    ...

 

 

3. 위치 정보 업데이트 요청하기

 위치 관리자는 일정한 시간 간격으로 위치 정보를 확인하거나 일정 거리 이상을 이동했을 때 위치 정보를 전달하는 기능을 제공합니다. 위치 관리자에게 현재 위치를 알려달라고 요청하기 위해서는 requestLocationUpdates() 함수를 호출해야 하는데 parameter에는 최소 시간과 최소 거리, 위치 리스너 객체가 전달되어야 합니다. 1번에서 작성한startLocationService() 함수를 수정하겠습니다.

 

MainActivity.java

    public void startLocationService() {
        ...
        앞에는 그대로
        ...
        
        GPSListener gpsListener = new GPSListener();
        long minTime = 10000;
        float minDistance = 0;
        
        manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, gpsListener);
        Toast.makeText(getApplicationContext(), "내 위치확인 요청함", Toast.LENGTH_SHORT).show();
    }

최소 시간은 10초, 최소 거리는 0으로 하여 10초마다 위치 정보를 전달받게 됩니다.

 

4. 매니페스트에 추가하기

 GPS를 이용해 위치 정보를 받기 위한 권한은 ACCESS_FINE_LOCATION으로 정의되어 있으므로 앞에서 이 권한은 추가했습니다. 그런데 이 권한은 위험 권한으로 분류되어 있으므로 위험 권한을 부여하는 설정과 코드를 추가하겠습니다.

 

build.gradle(Module:app)

...

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
	...
    implementation 'com.github.pedroSG94:AutoPermissions:1.0.3'
}

다 입력하고 상단에 Sync Now를 클릭해주세요.

 

MainActivity.java

public class MainActivity extends AppCompatActivity implements AutoPermissionsListener {

    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...

        AutoPermissions.Companion.loadAllPermissions(this, 101);
    }

    ...

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        AutoPermissions.Companion.parsePermissions(this, requestCode, permissions, this);
    }

    @Override
    public void onDenied(int i, String[] strings) {
        Toast.makeText(getApplicationContext(), "permissions denied : " + strings.length, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onGranted(int i, String[] strings) {
        Toast.makeText(getApplicationContext(), "permissions granted : " + strings.length, Toast.LENGTH_SHORT).show();
    }
}

 

이제 앱을 실행시켜 보겠습니다.

 

그러면 제일 처음에 권한을 부여하라는 대화상자가 표시됩니다. 허용해봅니다.

 

버튼이 존재하고 이 버튼을 누르면 현재 위치의 위도와 경도가 TextView에 나타나게 됩니다. 에뮬레이터로 실행하면 기본적으로 미국위치가 뜨고, 가상 위치를 따로 설정할 수 있습니다.

 

에뮬레이터 옆의 ... 버튼을 누르고 Location 탭을 누릅니다. 그리고 위치를 선택해주고 SAVE POINT를 누릅니다.

 

 

여기는 PNU라고 적어두고 OK를 누릅니다.

 

그리고 오른쪽 하단의 SET LOCATION을 누르면 현재 위치로 설정된 것입니다.

 

앱에서 다시 '나의 위치' 버튼을 누르면 PNU의 위도, 경도를 알려주는 것을 확인할 수 있습니다.

 

 


2. 현재 위치의 지도 보여주기

 현재 위치를 위도, 경도로 보여주면 아무도 알아볼 수 없을 것입니다. 그렇기 때문에 지도를 이용하여 위치를 나타낼 것 입니다. 지도는 어떻게 보여주는 것일까요?

 

안드로이드에서는 앱 화면 안에 지도를 넣을 수 있도록 맵프래그먼트(MapFragment)가 제공됩니다. 맵 프래그먼트는 새로운 방식의 구글맵 서비스 v2 기능을 사용할 수 있도록 추가된 기능으로 Google Play Service 모듈을 사용합니다. 지도를 보여주기 위해서는 다음 과정이 필요합니다.

 

· Google Play Services 라이브러리 사용 설정하기

  구글맵 서비스 v2는 Play Services 라이브러리를 사용합니다. 따라서 구글맵을 사용하려면 이 라이브러리를 추가해야 합니다.

 

· XML 레이아웃에 맵프래그먼트 추가하기

  앱 화면에 지도를 넣으려면 XML 레이아웃에 맵프래그먼트를 추가합니다.

 

· 소스 코드에서 내 위치로 지도 이동시키기

  지도를 띄울 때 내 위치가 보여야 하므로 소스 코드에 지도를 내 위치에 맞추어 이동시키는 기능을 추가합니다.

 

· 매니페스트에 설정 추가하기

  지도를 사용하려면 권한이 필요합니다. 이 외에도 필요한 설정 정보를 매니페스트에 등록해야 합니다.

 

· 지도 API 키

  구글맵 서비스를 사용하려면 구글 콘솔에서 지도 API 키를 발급받아 앱의 매니페스트에 넣어주어야 합니다.

 

 

 실습으로 넘어가 보겠습니다.

이번에는 새로운 프로젝트를 만들어서 진행하겠습니다.

 

Google Play Services 라이브러리 사용 설정하기

 

안드로이드 스튜디오 화면의 위쪽에 있는 SDK Manager 아이콘을 눌러 SDK 매니저 화면을 불러옵니다.

 

그런 다음 왼쪽의 메뉴에서 Appearance & Behavior -> System Settings -> Android SDK를 선택해 주세요.

 

오른쪽 창에서 SDK Tools 탭을 선택하여 Google Play services 모듈이 설치되어 있는지 확인해주세요.

 

저처럼 설치가 되어있지 않다면 모듈을 선택해서 Apply 버튼을 누르면 설치가 될 것입니다.

 

OK 

 

설치중,,,

 

설치가 완료되면 Finish, OK 하면 됩니다.

 

 

XML 레이아웃에 맵프래그먼트 추가하기

File의 Project Structure를 클릭해주세요.

 

그리고 Dependencies의  app Module에서 + 버튼을 누르고 1 Library Dependency를 클릭해주세요.

 

그러면 상단에 play-services-maps 를 입력하고 Search 버튼을 누르면 검색 결과가 표시됩니다. 이를 선택한 채로 OK 버튼을 누릅니다. 그러면 Google play services 라이브러리를 사용할 수 있게 된겁니다.

 

이제 XML 레이아웃을 만들어 보겠습니다.

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">


    <fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        class="com.google.android.gms.maps.SupportMapFragment" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="나의 위치" />

</LinearLayout>

class 속성으로 SupportMapFragment라는 이름의 클래스가 할당되어 있습니다. 이 객체는 소스 코드에서 참조할 수 있으며 SupportMapFragment 안에 들어있는 GoogleMap 객체 위에 지도가 표시됩니다. GoogleMap 객체는 프래그먼트가 초기화된 후에 참조할 수 있는데, 레이아웃에 정의한 MapFragment 객체를 소스 코드에서 참조한 후 getMapAsync() 함수를 호출하면 GoogleMap 객체를 초기화하는데 비동기 방식으로 처리됩니다. 따라서 콜백 객체를 parameter로 전달한 후 초기화가 완료될 때 콜백 객체 안의 함수가 자동으로 호출되도록 만듭니다.

 

MainActivity.java

package com.example.week5_2;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

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.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.pedro.library.AutoPermissions;
import com.pedro.library.AutoPermissionsListener;

public class MainActivity extends AppCompatActivity implements AutoPermissionsListener {

    SupportMapFragment mapFragment;
    GoogleMap map;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                Log.d("Map", "지도 준비됨");
                map = googleMap;
            }
        });

        try {
            MapsInitializer.initialize(this);
        } catch (Exception e) {
            e.printStackTrace();
        }

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startLocationService();
            }
        });

        AutoPermissions.Companion.loadAllPermissions(this, 101);
    }

    public void startLocationService() {
        LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        if (Build.VERSION.SDK_INT >= 23 &&
                ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        Location location = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (location != null) {
            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
            showCurrentLocation(latitude, longitude);
        }

        GPSListener gpsListener = new GPSListener();
        long minTime = 10000;
        float minDistance = 0;

        manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, gpsListener);
        Toast.makeText(getApplicationContext(), "내 위치확인 요청함", Toast.LENGTH_SHORT).show();
    }

    class GPSListener implements LocationListener {
        @Override
        public void onLocationChanged(Location location) {
            Double latitude = location.getLatitude();
            Double longitude = location.getLongitude();
            showCurrentLocation(latitude, longitude);
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {}

        @Override
        public void onProviderEnabled(String provider) {}

        @Override
        public void onProviderDisabled(String provider) {}
    }

    private void showCurrentLocation(Double latitude, Double longitude) {
        LatLng curPoint = new LatLng(latitude, longitude);
        map.animateCamera(CameraUpdateFactory.newLatLngZoom(curPoint, 15));
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        AutoPermissions.Companion.parsePermissions(this, requestCode, permissions, this);
    }

    @Override
    public void onDenied(int i, String[] strings) {
        Toast.makeText(getApplicationContext(), "permissions denied : " + strings.length, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onGranted(int i, String[] strings) {
        Toast.makeText(getApplicationContext(), "permissions granted : " + strings.length, Toast.LENGTH_SHORT).show();
    }
}

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.week5_2">
    
    <permission android:name="com.example.week5_2.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />
    <uses-permission android:name="com.example.week5_2.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-feature android:glEsVersion="0x00020000"
        android:required="true" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        
        <uses-library android:name="com.google.android.maps" />
        <uses-library android:name="org.apache.http.legacy"
            android:required="false" />

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="API_KEY를 입력해주세요" />

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

구글맵 API 키 발급받기

 마지막으로 구글맵 API 키를 발급받아 매니페스트 안에 입력해 보겠습니다. 

http://console.developers.google.com 

 

Google Cloud Platform

하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.

accounts.google.com

사이트에 접속하여 구글 계정으로 로그인 해주세요.

 

 

왼쪽의 라이브러리를 클릭해주세요.

 

그리고Maps SDK for Android를 사용할 수 있도록 해야합니다. 클릭해주세요.

 

 

사용을 눌러줍니다.

 

사용 설정이 되면 왼쪽의 사용자 인증 정보 메뉴로 들어와줍니다. 그리고 + 사용자 인증 정보 만들기 버튼을 눌러주세요. (저는 이미 한 번 만들어서 화면이 )

 

여기서는 API 키를 선택해줍니다.

 

발급된 API 키를 복사해줍니다.

 

AndroidManifest.xml의 API_KEY value 값으로 방금 복사한 키를 넣어주면 됩니다.

 

이제 앱을 실행시키면 됩니다.

 

위치 권한을 허용하고 나의 위치 버튼을 클릭하면

 

나의 위치를 지도가 나타내는 것을 확인할 수 있습니다.

 


3. 지도에 아이콘 추가하기

 아직은 기본 지도 외에는 아무것도 표시되어 있지 않습니다. 보통 앱을 만들 때는 현재 위치를 아이콘으로 표시하거나 주변의 카페 위치를 지도 위에 표시해 줄 수 있어야 사용자가 알고 싶어 하는 정보를 보여줄 수 있습니다.

 

오버레이(Overlay)란?

 일반적으로 지구상의 현실 공간을 지도로 표현할 때는 레이어(Layer)로 분리하고 각각의 레이어에는 유사한 속성을 가진 객체들을 넣어주게 됩니다. 구글맵에서는 이런 레이어들을 오버레이(Overlay)라고 부릅니다.

 

 

내 현재 위치 표시를 위한 오버레이 추가하기

 방금 만든 프로젝트를 그대로 사용하겠습니다.

 

MainActivity.java

public class MainActivity extends AppCompatActivity implements AutoPermissionsListener {

    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                Log.d("Map", "지도 준비됨");
                map = googleMap;
                map.setMyLocationEnabled(true);
            }
        });
		...
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (map != null) {
            map.setMyLocationEnabled(true);
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (map != null) {
            map.setMyLocationEnabled(false);
        }
    }
	...
}

액티비티가 중지되거나 다시 시작할 떄 현재 위치를 표시하기 위해 setMyLocationEnabled(true) 함수를 호출합니다. 이 함수는 지도 초기화가 완료된 후에 호출되는 onMapReady() 함수 안에서 호출합니다.

 

앱을 실행하면

내 위치가 뜨는 것을 알 수 있습니다.

 


4. 마커를 사용해 내 위치 표시하기

아이콘을 사용해 원하는 위치를 포인트로 쉽게 표시할 수 있는 방법은 마커(Marker)를 만들어 추가하는 것입니다. 마커는 지도 위에 표시되는 아이콘이라고 생각하면 됩니다.

 

drawable 폴더에 원하는 아이콘(사진)을 추가해주세요. 

 

MainActivity.java

public class MainActivity extends AppCompatActivity implements AutoPermissionsListener {
    ...
    
    MarkerOptions myLocationMarker;

    ...

    private void showCurrentLocation(Double latitude, Double longitude) {
        ...
        showLocationMarker(curPoint);
    }
    
    private void showLocationMarker(LatLng curPoint) {
        if (myLocationMarker == null) {
            myLocationMarker = new MarkerOptions();
            myLocationMarker.position(curPoint);
            myLocationMarker.title("내 위치\n");
            myLocationMarker.snippet("GPS로 확인한 위치");
            myLocationMarker.icon(BitmapDescriptorFactory.fromResource(R.drawable.mylocation));
            map.addMarker(myLocationMarker);
        } else {
            myLocationMarker.position(curPoint);
        }
    }
	...
}

 

앱일 실행하고 나의 위치를 확인해보면

마커가 뜨는 것을 확인할 수 있습니다,,,,, (사이즈가 너무 크네요,, 여러분들은 사이즈 작은 사진 구해오세욥,,,)

 


센서 이해하기

 센서는 앱의 핵심이라기보다는 부가적으로 사용성으로 높이는데 큰 도움을 주는 요소입니다. 안드로이드에서는 다양한 표준 센서들을 지원합니다. 

센서 이름 상수 설명
가속 센서(Accelerometer) TYPE_ACCELEROMETER 가속도 감지, 외부의 충격량과 방향 감지(단위: m/s^2)(중력 + 선형가속)
자이로스코프 센서(Gyroscope) TYPE_GYROSCOPE 회전 정보 감지, 다양한 축을 따른 회전각 감지
중력 센서(Gravity) TYPE_GRAVITY 축의 방향과 중력 감지(단위 : m/x^2)
조도 센서(Light) TYPE_LIGHT 빛의 세기 감지(단위 : lux)
선형 가속 센서(Linear Acceleration) TYPE_LINEAR_ACCELERATION 각 축에 따른 가속도를 감지하는 3차원 벡터(단위 : m/s^2)
근접 센서(Proximity) TYPE_PROXIMITY 근접한 물체와의 거리 감지(단위 : cm)
단말에 따라 가깝거나 먼 정도만 표시할 수도 있음
온도 센서(Temperature) TYPE_TEMPERATURE 온도 감지
방향 센서(Orientation) TYPE_ORIENTATION 방향각 감지(단위 : degree)