반응형

출처: http://oreon.tistory.com/m/post/171

 

센서??? : 열, 빛, 온도, 압력, 소리 등의 물리적인 양이나 그 변화를 감지하거나 구분 및 계측하여 일정한 신호로 알려주는 부품이나 기구, 또는 계측기. 인간이 보고 듣고 하는 오감을 기계적 전자적으로 본떠 만든 것이라고 이해하면 쉽다. 동작을 감지하거나 소리에 따라 반응하거나, 누르는 힘에 따라 반응하는 등 그 활용 범위는 매우 넓다. 센서의 종류에는 온도 센서, 압력 센서, 유량 센서, 자기 센서, 광 센서, 음향 센서, 미각 센서, 후각 센서 등이 있다. 고속도로에 차량이 진입하면 통행 카드가 나오거나, 교실의 화재 감지기, 현관의 자동 점멸등, 어두워지면 켜지는 가로등 등이 간단한 센서의 예이다.

 

1.자이로스코프 센서(Gyroscope Sensor) ▶ 자이로스코프 센서 탑재 스마트폰

- 자이로스코프 센서는 기존의 가속센서에 각각 회전을 넣어 총 6축을 인식할 수 있게 해서, 좀더 정밀한 동작을 인식 할 수 있도록 도와 주는 센서로서, 애플 아이폰4에 처음으로 탑재되어 삼성 갤럭시 탭, 팬택 베가S에서도 탑재 되는 등 최근의 출시 되는 제품에는 많이 탑재되고 있습니다.

예 : 스마트폰 게임 속 증강현실 구현(스마트폰 슈팅게임)

 

 

 

2.지자기 센서(Geo-magnetic Sensor) ▶ 지자기 센서 탑재 스마트폰

- 지자기 센서는 지구 자기장을 이용해 방위각을 탐지할 수 있는 전자 나침판으로 위치 추적, 3차원 입체게임, 나침반 등의 용도로 사용되며 휴대폰, 무전기, GPS, PDA, 네비게이션 항법장치 등에 사용됩니다.

예 : 지구 주위 다수의 GPS 위성간의 시간차를 계산해서 현재의 위치정보 인식용으로 쓰임

 

 

 

3.가속도 센서(Accelerometer) ▶ 가속도 센서 탑재 스마트폰

- 가속도 센서는 이동하는 물체의 가속도나 충격의 세기를 측정하는 센서입니다, 가속도센서는 출력신호를 처리하여 물체의 가속도, 진동, 충격 등의 동적 힘을 측정하는 것으로, 물체의 운동상태를 상세하게 감지할 수 있으므로 활용 분야가 아주 넓고, 갖가지 용도로 사용되고 있습니다. 가속도 센서는 자동차, 기차, 선박, 비행기 등 각종 수송수단, 공장자동화 및 로봇 등의 제어시스템에 있어서는 필수적인 센서입니다. 휴대폰의 방향 및 움직임 감지로 다양한 어플리케이션에서 사용.

예 : 화면 스크린의 가로 세로 이동에 적용

휴대폰을 움직이면 화면이 흔들리게 하는 기능.

 

 

 

 

4.중력 센서(G-sensor) ▶ 중력 센서 탑재 스마트폰

- 중력센서는 중력이 어느 방향으로 작용하는지 탐지하고 그 상황에 맞춰 각종 기기의 사용자 편의를 돕는 기능입니다. 디지털기기에 속속 탑재되면서 이용자들에게 활용되고 있으며, 실제로 사용자가 기기를 들고 있는 방향에 따라 자동으로 회전을 하거나, 차량 충돌 시 방향을 기록하는 등 디지털기기에 중력센서의 활용도가 넓어지고 있습니다.

예 : 게임 내에서 기울기로 자동차를 운전하는 용도로도 쓰임

통화 중 폰을 흔들면 주변 소음제거 기능 자동동작

화면의 기울기에 따라 세로/가로보기 전환

Sleep Cycle - 중력센서가 수면 중의 뒤척임을 감지해서 수면 사이클을 작성하여 보 여주고, 알람시간을 설정하면 그 시간대 전후의 깨어나기 쉬운 얕은 잠의 상태일 때 알람을 울려줌

 

 

5.광 센서/조도센서(Light Sensor) ▶ 광 센서 탑재 스마트폰 | 조도 센서 탑재 스마트폰

- 주변 광 센서란 빛을 감지하여 이를 다시 처리가 용이한 양으로 변환하는 소자(트랜스듀서(변환기; Transducer)라고 합니다. 일반 터치 휴대폰을 비롯하여 스마트폰에 탑재가 많이 되는데 조도 센서라고도 부릅니다.

예 : 스크린 밝기 조정, 사진 찍을 때 밝기 조정

 

6.근접 센서(Proximity Sensor) ▶ 근접 센서 탑재 스마트폰

- 근접 센서란 사물이 다른 사물에 접촉되기 이전에 근접하였는지 결정하는 데 사용됩니다. 근접센서는 물리적인 접촉없이 전자계의 힘을 이용하여 물체의 존재여부, 통과, 연속흐름, 적체 등의 감지 및 위치 제어에 이용하는 센서입니다. 근접 센서는 검출 원리에 따라 고주파 발진형, 정전 용량형, 자기형, 광전형, 초음파형 등으로 분류됩니다.

예 : 통화 중 스크린 얼굴이 가까워지면 터치기능 중단하는 것

통화 중 폰을 귀에 대면 액정 전원 차단(절전 기능)

 

7.디지털 나침반(Digital Compass) ▶ 디지털 나침반 탑재 스마트폰

- 디지털 나침반은 자기나침반(지구의 자성을 이용해 북과 남, 동과 서의 방위를 알 수 있게 해주는 용도로 만들어 진 것으로, 주로 배나 항공기의 진로를 측정하는데 쓰임)을 디지털화하여 스마트폰 등의 휴대용 디지털 기기에 탑재되어 사용되고 있습니다. 모바일 어플리케이션(App)을 활용하여 일반 나침반처럼 동서남북의 방위를 알 수 있고, 위치정보활용의 용도로 지도 앱(네이버 지도, 다음 지도, 구글 맵 등)에서 유용하게 활용 할 수 있습니다.

예 : 자기장의 영향을 받아 금속 탐지기에도 쓰임

현재의 위치정보 인식용으로 쓰임

반응형
반응형

출처: http://ememomo.tistory.com/36


/*
 * Copyright (C) 2006 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.text;

/**
 * When an object of a type is attached to an Editable, its methods will
 * be called when the text is changed.
 */
public interface TextWatcher extends NoCopySpan {
    /**
     * This method is called to notify you that, within <code>s</code>,
     * the <code>count</code> characters beginning at <code>start</code>
     * are about to be replaced by new text with length <code>after</code>.
     * It is an error to attempt to make changes to <code>s</code> from
     * this callback.
     */
    public void beforeTextChanged(CharSequence s, int start,
                                  int count, int after);
    /**
     * This method is called to notify you that, within <code>s</code>,
     * the <code>count</code> characters beginning at <code>start</code>
     * have just replaced old text that had length <code>before</code>.
     * It is an error to attempt to make changes to <code>s</code> from
     * this callback.
     */
    public void onTextChanged(CharSequence s, int start, int before, int count);

    /**
     * This method is called to notify you that, somewhere within
     * <code>s</code>, the text has been changed.
     * It is legitimate to make further changes to <code>s</code> from
     * this callback, but be careful not to get yourself into an infinite
     * loop, because any changes you make will cause this method to be
     * called again recursively.
     * (You are not told where the change took place because other
     * afterTextChanged() methods may already have made other changes
     * and invalidated the offsets.  But if you need to know here,
     * you can use {@link Spannable#setSpan} in {@link #onTextChanged}
     * to mark your place and then look up from here where the span
     * ended up.
     */
    public void afterTextChanged(Editable s);
}


TextWatcher 인터페이스를 보면 beforeTextChanged / onTextChanged /  afterTextChanged 함수를 오버라이딩 하여야 한다.

각각의 함수는 이름을 보면 대충 언제 구동되는지 알 수 있을 것이다. 

이 인터페이스를 이용해서 입력값에 대한 실시간 변화를 감지해 낼 수 잇다. 예를 들어 가격을 입력하는 창이라던지, 글자를 

입력하는 창에서 조건을 걸어 검사를 할때 유용하게 사용 할 수 있다. 

이번예제는 TextWatcher 인터페이스를 이용해서 글자수를 제한 해 보는 예제이다. 

하나의 입력창이 있고 , 그 입력창을 글자수를 실시간으로 반영 하며, 50자 이상일때 입력을 제한하는 Toast 메시지를 띄우는 

예제이다.

화면을 살펴 보면 


이런식의 예제이다. 이를 응용하면 가격표에 자동으로 , 표시를 추가하는등의 함수도 작성 할 수 있다.

쓰는 법은 간단하니 코드를 살펴 보자. 


main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical"
 android:background="#ffffff"
 android:gravity="center"
 >
 <LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal">
  <TextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_marginLeft="9dip"
   android:layout_marginTop="10dip" />
  <TextView
   android:id="@+id/review_length"
   android:layout_marginTop="15dip"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:paddingRight="5dip"
   android:layout_marginLeft="240dip"
   android:text="0/50자" />
 </LinearLayout>
 <EditText
  android:id="@+id/estimate_review_content"
  android:layout_marginLeft="8dip"
  android:layout_marginTop="1dip"
  android:maxLength="50"
  android:padding="7dip"
  android:layout_width="200dip"
  android:layout_height="75dip" />
</LinearLayout>



Strudy_0522.java

package com.tistory.ememomo;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class Strudy_0522 extends Activity implements TextWatcher{
    
 private EditText   review_content;
    private TextView  review_length;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        review_content     = (EditText) findViewById(R.id.estimate_review_content);
        review_length     = (TextView) findViewById(R.id.review_length);
        review_content.addTextChangedListener(this);
    }
    
    @Override
 public void afterTextChanged(Editable s) {
  
 }
 @Override
 public void beforeTextChanged(CharSequence s, int start, int count,
   int after) {
  
 }
 @Override
 public void onTextChanged(CharSequence s, int start, int before, int count) {
  
  if(s.length() >= 50)
  {
   Toast.makeText(Strudy_0522.this, "글은 50자 까지 입력 가능합니다.", Toast.LENGTH_SHORT).show();
  }
  review_length.setText( s.length() + "/50자");
 }
}



EditText 입력창에 addTextChangedListener 리스너를 달아 주고 그 리스너를 이용하는건 TextView에다 넘겨주었다.

내가 처리한곳은 onTextChanged 함수 내에서 처리 했지만, 입력받기 전 중 후로 처리를 할 수 있으니 잘 살펴 보길 바란다.

반응형
반응형

출처 - http://blog.naver.com/PostView.nhn?blogId=sukuns&logNo=70114459329


에디트 텍스트 안의 글자 수를 셀때 가장 중요한 역할을 하는 것은 바로 TextWatcher라는 인터페이스이다

 

에디트텍스트는 사용자가 입력한 문자열의 상태가 바뀌는 것을 에디트텍스트 밖으로 알리기 위해 TextWatcher 객체를 addTextChangedListener()메서드의 인자로 사용한다.

 

...(생략)..

TextWatch watch = new TextWatcher(){

@Override

public void beforeTextChanged(CharSequence s, int start, int count, int after){

 CharSequence s : 현재 에디트텍스트에 입력된 문자열을 담고 있다.

 int start : s 에 저장된 문자열 내에 새로 추가될 문자열의 위치값을 담고있다.

 int count : s 에 담긴 문자열 가운데 새로 사용자가 입력할 문자열에 의해 변경될 문자열의 수가 담겨있다.

  int after : 새로 추가될 문자열의 수

}

@Override

public void onTextChanged(CharSequence s, int start, int before, int count){

 CharSequence s : 사용자가 새로 입력한 문자열을 포함한 에디트텍스트의 문자열이 들어있음

 int start : 새로 추가된 문자열의 시작 위치의 값 

int before : 새 문자열 대신 삭제된 기존 문자열의 수가 들어 있다

int count : 새로 추가된 문자열의 수가 들어있다.

}

@Override

public void afterTextChanged(Editable s){}

...(생략)..

Edittext editext = (EditText)findViewById(R.id.edittext);

edittext.addTextChangedListener(watch);

 

}

 

상위 코드가 실행되면 에디트 텍스트 문자 입력 상태가 변경될 때마다 beforeTextChanged().

onTextChanged(),afterTextChanged() 메서드를 순서대로 하나씩 호출한다.

즉, 사용자가 키보드에서 글자 한나를 누른 뒤에 손가락을 떼면 그 사이에 아래와 같은 순서를 거쳐서 글자 하나가 입력된다.

 

예 :

abcde 라는 문자열이 있다.

 이때 cde를 선택한다음

abcde

키보드에서 t를 찾아 누르면 에디트텍스트 내 문자열은 다음과같이 

abt 로 변한다

beforeTextChanged()

CharSequence s : abcde (에디트 텍스트에 들어있던 문자열

int start : (abced에서 변경될 텍스트가 c에서 시작하므로 start 값은 2 이다. 참고로 첫 문자열 a 는 0, b는 1)

int count : 3 (cde를 선택했으므로 cde의 길이는 3)

int after : 1(t가 입력되었으므로 t의 길이 1)

 

onTextChanged()

CharSequence s : abt (병경된 후 에디트 텍스트 내의 문자열 abt)

int start : 2(t는 a와 b다음이므로  위치 값은 2)

int before : 3(처음 abced에서 cde가 대신에 t 가 들어왔으므로 ced의 길이인3)

int count : 1 (새로 추가되었으므로 t의 길이 1)

반응형
반응형

https://drive.google.com/folderview?id=0B7rtSe_PH_fTWDQ0RC1DeWVoVUE&usp=sharing

반응형

+ Recent posts