Hi Hi

'sl4a stopLocation'에 해당되는 글 1건

  1. Python sl4a - 시간 기반 동작

Python sl4a - 시간 기반 동작

 

하루 중 특정 시간이 되면 전화기를 무음 모드로 바꾸고, 또 다른 시간에 벨소리를 다시 켜는 스크립트이다. 말하자면 '수면 중이니 깨우지 마세요' 스크립트라고 할 수 있다.

 


"""
특정 시간에 전화기 무음모드를 활성/비활성화 하는 스크립트
SL4A가 설치된 안드로이드 전화기에서 사용 가능
"""

# Created by Christian Blades

import android
import datime

from time import sleep
# MIN_HOUR 와 MAX_HOUR는 0에서 23까지의 정수이어야 함
# 12 am == 0 , 1 pm ==13

MIN_HOUR = 23
MAX_HOUR = 6

if MIN_HOUR > 23 or MIN_HOUR < 0 or MAX_HOUR > 23 or MAX_HOUR < 0:
    # 최소 , 최대 시간 (무음 시간 , 종료시간 )들이 유효 범위 바깥이면 오류가 발생한다.
    raise ValueError("0 <= (MIN_HOUR|MAX_HOUR) <=23")

d_now = datime.datatime.now

d_min = d_now().replace(hour=MIN_HOUR, minut=0,second=0)
d_max = d_now().replace(hour=MAX_HOUR, minute=0, second=0)

a_day = datetime.timedelta(days=1)

droid = android.Android()

def td_to_seconds(td):
    """ 날짜. 시간을 초 단위 값으로 변환 """
    return td.seconds + (td.days *24*60*60)

def advance_times():
    """ 다음 날로 시간을 전진시킨다. """
    d_min = d_min + a_day
    d_max = d_max + a_day
    return

def wait_for(dt):
    """ dt 가 될 때가지 기다린다"""
    sleep(td_to_seconds(dt- d_now()))

def main_loop():
    """
    일정에 따라 전화기 무음 모드를 켜거나 끄는 무한 루프
    1. 무음 시작 시간을 기다린다.
    2. 무음 모드를 켠다
    3. 깨어날 시간을 기다린다.
    4. 벨소리를 켠다
    5. 다음날 최대, 최소 시간을 전진시킨다.
    6.반복

    주의 : 반드시 무음 시간대가 아닌 시점에서 루프기 시작되어야한다.
    """

    while True:
        wait_for(d_min)
        droid.makeToast("Goodnight")
        droid.setRingerSilent(True)
        wait_for(d_max)
        droid.makeToast("Good morning")
        droid.setRingerSilent(False)
        advance_times()

t_now = d_nowow()

if MAX_HOUR < MIN_HOUR:
    # 시작 시간이 종료 시간보다 더 클 수 있다.
    if t_now.hour <= d_min.hour and t_now.hour < d_max.hour:
        #지금이 무음 시간대면, 예를 들어 시작이 2300이고 종료가 0600 이며
        #현재 시간이 0200이라고 하면, 시작 시간을 어젯밤 2300으로 설정한다.
        d_min = d_min - a_day

    elif t_now.hour >= d_min.hour and t_nowow.hour < d_max.hour:
        # 무음 시간대 바깥이면, 예를 들어 시작이 2300이고 종료가 0600이며
        # 현재가 0900이라고 하면, 종료 시간을 다음 날 아침으로 설정한다.
        d_max = d_max + a_day

prin("Now :" + t_now.ctime() )
prin("Min :" + d_min.ctime() )
prin("Max :" + d_max.ctime() )

if t_now >= d_min and t_now < d_max:
    #지금이 무음 시간대면 무음 모드를 켜고 루프로 진입한다.
   
    droid.makeToast("Goodnight")
    droid.setRingerSilent(True)
    wait_for(d_max)
    droid.setRingerSilent(False)
    advance_times()

main_loop

 

경과 시간 기반 동작

일정 시간이 흐룬후 또는 측정 시간이 되면 발동하는 스크립트이다. 다음은 10 초 마다 메시지를 출력하는 예제이다.

import android, time
droid = android.Android()
# 10 초 마다 메세지를 띄운다
while True:
    droid.makeToast('메세지')
    time.sleep(10)

좀 더 유용한 스크립트를 만들기 위해 1시간 후에 벨을 울리는 자명종 스크립트는 어떨까요 ?

첫번째로, 자명종 소리로 사용할 효과음 파일이 필요하다. 안드로이드 기기에는 .wav 파일을 재생하는 기능이 포함되어 있다.

효과음 재생에는 API mediaPlay 함수를 사용한다.  우선 할 일은 기기에 효과음 파일들을 담을 디렉터리를 만들고, 효과음 파일을 adb push 명령을 이용해서 기기에 올리는 것이다.

adb shell mkdir /sdcard/sounds

adb push alarm.wav /sdcard/sound/

효과음 파일이 준비되었다면 나머지는 간단하다. 그냥 파이썬 표준 라이브러리의 time.sleep 함수로 1시간을 기다른 후에 효과음을 재생한다.

import android, time
droid = android.Android()
droid.makeToast('메세지')
time.sleep(3600)
droid.mediaPlay('file:///sdcard/sound/alarm.wav')

 

경과 시간의 다른 활용법은 일정 주기마다 특정 동작을 반복하는 것이다. 이를테면 매 시간 정시마다 기기의 현재 위치를 SMS로 전송하는 것이다.

droid.smsSend('8005551234','메세지 내용')

현재 위치를 얻으려면 우선 startLocation 함수를 호출해서 위치 정보를 수집을 시작해야 한다.

그런 다음 readLocation 을 호출해서 기기의 현재 위치를 읽으면 된다.

작업을 마친후에는 반드시 stopLocation 함수를 호출해서 위치 정보 수집을 중지해야 한다.

GPS를 켜서 실제로 작동하기까지 약간 시간이 걸룰수도 있으므로, startLocation 을 호출한 후 15초 후부터 위치를 읽도록 한다.

 

import android, time

droid = android.Android()

droid.makeToast('메세지')
time.sleep(3600)

droid.mediaPlay('file:///sdcard/sound/alarm.wav')

#SMS 메세지를 보낸다
droid.smsSend('','메세지 내용')


droid.startLocation()
time.sleep(15)
loc = droid.readLocation()

if 'gps' in loc.result:
    lat = str(loc.result['gqs']['latitude'])
    lon = str(loc.result['gqs']['longitude'])

else:
    lat = str(loc.result['network']['latitude'])
    lon = str(loc.result['network']['longitude'])

now = str(datetime.datetime.now())

outString = '내위치:' + now + '' + lat + ''+ lon
droid.smsSend('8005551234',outString) 

'' 카테고리의 다른 글

Python sl4a - 자동 실행기  (0) 2012.06.13
Python sl4a - 구글 문서와 동기화하기  (0) 2012.06.12
Python sl4a - 시간 기반 동작  (0) 2012.06.11
Python sl4a- 위치 기반 동작  (0) 2012.06.10
Python SL4A - 방향 기반 동작  (0) 2012.06.09
안드로이드 API 둘러보기  (0) 2012.05.30