본문 바로가기

프로그램/앱인벤터

[문제풀이]앱인벤터2 - "06. 파리관광" 확장하기 P133

앱인벤터2 문제풀이 - 133페이지 "파리관광" 확장하기

 

1. 내 고장, 내 학교, 또는 다음번 여행지로 생각하는 곳을 관광지로 선정해 앱을 수정한다. 

(구글지도서비스 : https://www.google.co.kr/maps)

(URL주소축약서비스 : https://bitly.com/)

 

 

  디자이너탭

에서 일부문구를 적합하게 수정하고, 

블록탭

에서 리스트 목록을 "서울남산타워, 광화문, 연남동" 등으로 수정하고, 구글지도 서비스를 이용해 이들의 URLs 도 인덱스 순서대로 수정한다. 이 때 주소축약서비스 https://bitly.com/  이용한다.

 

 

 

 

 

2. ActivityStarter를 이용하여 이메일을 보내거나 YouTube 앱을 구동해 보자. 

Tip 

http://appinventor.mit.edu/explore/ai2/activity-starter.html

 

이메일 보내기

  디자이너탭

에서 

TextBox 3개추가하고, 첫번째 TextBox에 Hint-"이메일 주소를 입력하세요." 두번째 TextBox에 Text- "제목 :" , 세번째 TextBox에 Text- "내용 :" 이라고 표시하고, Button Text를 "이메일보내기"로 바꾼다.

 

 

  블록

에서

 이메일보내기(버튼) 이벤트를 처하기 위해서, when 이메일보내기.Click do 에 

set ActivityStarter1.Action to

 "android.intent.action.VIEW"(모든앱공통), 

set ActivityStarter1.DataUri to

 join (string-6개 끼우기) "mailto:", TextBox1.Text(이메일주소텍스트), "?subject=", TextBox2.Text(제목텍스트), "&body=", TextBox3.Text(내용텍스트)입력후, call ActivityStarter1.StartActivity 를 삽입한다.


 

 YouTube 앱 구동하기

  디자이너탭

에서 

유투브를 삽하기 위해 먼저 디자이너탭에서 Button과 ActivityStarter를 추가하고, 버튼 text는 "유투브"로 한다. 

  블록

에서

 버튼 클릭시 이벤트를 처리하기 위해 when Button1.Click doset ActivityStarter1.Action to "android.intent.action.VIEW"(다른앱도 공통), set ActivityStarter1.DataUri to "https://youtu.be/giW2i5W9O7c"(적절한 유투브 영상공유하기로 주소복사해서 붙이기), call ActivityStart1.StartActivity를 하면된다.

 

 

 

3. (심화문제) 사용자가 직접 새로운 관광지와 URL을 추가할 수 있는 앱으로 확장해 보자. 이제 관광지 정보를 TinyWebDB에 저장해야 한다. TinyWebDB의 사용법에 대해서는 10장의 <퀴즈만들기>, <퀴즈풀기> 앱을 참고한다. 

 

  디자이너탭

에서 TextBox1, TextBox2를 추가하여, 각각 관광지와 관광지URL(구글지도검색)주소를 입력받을 수 있게 만들어 놓는다. 그리고, 밑에 "저장하기" 버튼(button)을 만들자. 웹뷰는 그냥 원래거 사용해도 되고, TinyWebDB를 추가하자. 그리고 나머지 문구도 적절히 수정한다.

 

 

 

  블록

에서 

먼저 입력받은 여행지 정보를 저장하고 사용자가 볼 수 있도록 띄우기 위해서, 리스트 목록이 필요하다. 각각 리스트 목록이 저장될 변수 initialize global tourlist to create empty listinitialize global urllist to create empty list를 선언한다. 

그리고 사용자가 선택할 수 있는 리스트 목록을 보여주고, 이것을 웹뷰어로 연결하기 위한 작업을 하는데, when ListPicker1.AfterPicking docall WebViewer1.GoToUrl urlselect list item listget global urllist, indexListPicker1.SelectionIndex (사용자가 선택하는 항목)로 설정하여 끼운다.

위와 같이 했으면, 이 번엔 "저장하기"버튼을 눌렀을 때 발생하는 이벤트를 처리해야 하는데, when 저장하기.Click do에 관광지와 URL 변수에 저장하는 실행문 add items to list listget global tourlistitemTextBox1.Text (첫번째 입력값 관광지명이 입력된다)를 입력하고, add items to list listget global urllist itemTextBox2.Text (두번째 입력값인 Url이 입력된다)를 입력하고,
다시 새로운 값을 입력받기 위한 대기상태인 공백을 만들어야 하므로, set TextBox1.Text to "", set TextBox2.Text to ""를 끼운다. 그리고 입력받은 정보들을 웹에 클라우드 형식으로 저장하기 위해서 TinyWebDB를 사용하는데, call TinyWebDB1.StoreValue tag "tours", valueToStoreget global tourlist를 입력한다. 만찬가지로 url도 처리해야 하므로 call TinyWebDB1.StoreValue tag "url", valueToStoreget global urllist를 입력한다.

이를 완성했다면, 앱이 종료했다가 실행될 때 웹에서 내가 입력했던 데이터들을 리스트 목록으로 가져와야 하는데, 이를 처리하기 위해 when TinyWebDB1.GotValue doif then 을 가져와서 끼우고, ifis a list? thing get valueFromWebDB (웹DB에 자료가 저장되어 있다면 아래 명령을 수행하라)를, then에 또 다시 if then else 목록을 만들어 ifget tagFromWebDB = "tours" (웹DB에서 가져온 데이터가 tours가 맞다면), thenset global tourlist to get valueFromWebDB (웹DB값을 tourlist 목록에 추가하고), elseset global urllist to get valueFromWebDB (그렇지 않으면, urllist 목록에 추가해라)를 만들어 끼우고또다시 if then 을 새로 가져와서, 여행지와 여행지url이 갯수가 같다면, 리스트목록을 나타내기 위해 iflength of list list get global tourlist = length of list list get global urllist 를, thenset ListPicker1.Elements to get global tourlist를 조립한다.

그리고 최종적으로 앱이 재실행될때 가장 먼저 수행해야 하는 값을 Screen에 등록해야 하는데, 웹DB를 클라우드로 바로 가져오는 일부터 앱이 수행할 수 있도록, when Screen1.Initialize docall TinyWebDB1.GetValue tag"tours", call TinyWebDB1.GetValue 하나 더 추가해서 tag에 url을 설정해 준다.

 

 

 

  아래는 완성한 전체코드 이다. 입력이 안된줄 알고 에펠탑을 여러번 입력했는데, 웹DB에 저장이 되있었나 보다. 그외에는 그냥 한개씩 추가해 본 것들이다. 잘 실행된다.

 

 

 

 

<출처 :  David Wolber, Hal Abelson, Ellen Spertus, Liz Looney(2015), 

앱인벤터2(초판)(오일석, 이진선 번역, 서울:한빛아카데미. (원서는 2014년에 출판)>

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."