반응형
P2SK의 라이프
블로그 이미지
P2SKLife
앱개발에 대한 정보와 취미인 음악감상에 대한 정보를 공유합니다.

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

250x250
반응형
728x90
반응형

두 화면(화면1, 화면2)이 있을 때 화면1에서 open another screen screenName 블럭을 사용하여 화면2를 오픈한 후에

다시 화면1을 오픈하고자 할 경우에 두 가지 처리방법을 생각해볼 수 있습니다.

화면2에서 open another screen screenName 블럭을 사용하여 화면1을 오픈하는 것과 화면2를 닫기 하는 것입니다.

그런데 화면이 3개 이상 일때 여러개의 화면을 오픈 한 후 현재 화며을 닫고 다른 화면을 오픈하고자 할 경우에는 다음과 같은 블럭구성을 하여 처리할 수 있습니다. 현재 화면을 닫지 않고 다른 화면을 오픈하면 기존의 화면이 남아 있게 됩니다. 그래서 핸드폰에서 뒤로 가기 버튼을 터치하면 오픈하고 닫지 않았던 화면이 보여지게됩니다.

따라서, 필요에 따라서 화면을 닫으면서 다른 화면을 오픈할 필요가 있는 경우에는 다음과 같은 블럭 구성으로 처리하면 현재 화면을 닫고 새로운 화면을 오픈하게됩니다.

728x90
반응형
posted by P2SKLife
728x90
반응형

코듈러에서 외장저장소에 저장하기 위한 퍼미션을 거절당했을 때 조치방법중 한가지 입니다..

 

728x90
반응형
posted by P2SKLife
728x90
반응형

코듈러에서 FIle컴포넌트로 파일을 읽어 처리를 하면 읽기 관련하여 버그가 발생한다고 합니다. 그래서 Companion 또는 apk로 빌드하여 처음 실행하면 다음과 같은 에러가 뜨고 종료됩니다.

메세지의 뜻은 길이가 0인 리스트에서 뭔가 읽으려고 시도했다는 오류인데...

컴패니온 실행하면서 아무리 리스트를 Do It으로 읽어 봐도 전혀 빈 리스트가 아님에도 이런 오류가 발생합니다.

 

그런데 구글링을 해보니 File 컴포넌트의 버그라는 말을 듣고 파일 컴포넌트를 사용하지 않고 직접 리스트를 작성하였더니 에러가 뜨지 않게 되었습니다.

참고로 다른 파일 확장 컴포넌트로 읽을 수 있으면 그런 방법도 가능하다고 합니다..

 

또 다른 가능성은 약간의 시간차로 인해서 발생할 수도 있다는 것을 염두에 두시기 바랍니다. 즉, 동시에 처리에 들어가면 리스트 생성을 마치기 전에 리스트를 읽기시도할 수가 있는데 그럴 때도 이와 같은 오류가 발생할 수도 있으니 처리 순서를 동시 발생에서 순차적으로 처리하도록 변경해 보시기 바랍니다..

 

2022년 1월 27일 기준 작성된 내용이라 혹 이후에 버그가 개선되거나 대체할 컴포넌트가 있을 수도 있음을 참고하시기 바랍니다.

728x90
반응형
posted by P2SKLife
728x90
반응형

안드로이드 버전11부터 저장소 정책이 변경되어 파일을 저장하고 읽기가 아주 까다로워졌습니다.

이제 앱은 자신의 저장공간에만 파일을 저장할 수 있게 변경되었습니다.

기존에 내장메모리에 경로를 직접 저장하던 것이 먹통이 되어버려 에러가 발생하게 됩니다.

기존에는 여기 저기 중구난방으로 파일들이 저장되어 앱을 삭제해도 제거되지 않는 쓰레기 파일들이 존재하거나 다른 앱의 공간까지도 접근하는 등의 문제가 발생하여 이를 강화했다고 합니다.

이에 앱인벤터에서 nb187업데이트 후 새로 scope라는 개념이 등장하여 이를 정리해 보려고 합니다.

이 내용은 주로 File컴포넌트를 사용할 때 적용되는 내용입니다.

경로(path)를 정의하는 방식과 해당 스코프의 특징을 간략하게 살펴보겠습니다.

 

1. APP : 해당 앱만 접근 가능. 파일 탐색기로 기존에는 검색이 가능했으나 안드로이드10부터 불가.

   - 경로 : /storage/emulated/O/Android/data/패키지명/files/

2. Asset : 앱인벤터에사 업로드한 에셋 파일 저장 공간으로 읽기만 가능.

  - 경로 : 파일명 앞에 //를 붙이면 앱 안에서 읽을 수 있음.

3. Cache : 임시로 파일 저장. 앱 삭제시 삭제. 해당 앱만 접근 가능.

   - 경로 : /data/data/패키지명/cache/ [안드로이드 5.1.1]

             /data/user/O/패키지 네임/cache/ [안드로이드 10]

4. Legacy : 기존 방식으로 안드로이드 11이상에서 먹통

  - 경로 : /파일명 -> /sdcard/파일명

5. Private : 해당 앱만 접근 가능.

  - 경로 : /data/data/패키지명/files [안드로이드 5.1.1]

            /data/user/O/패키지명/files [안드로이드 10]

6. Shared : 공유 저장소. 모든 앱이 접근하여 읽기 쓰기 가능.

    현재 파일 컴포넌트로 접근 불가하지만 TaifunFile 확장 기능으로는 접근 가능.

   - 경로 : /storage/emulated/O/하위 미디어 디렉토리

 

728x90
반응형
posted by P2SKLife
728x90
반응형

앱을 개발하다보면 미디어 파일을 많이 사용해야할 일이 있습니다. 

그런데 앱에 포함하면 용량 문제로 빌드하기 곤란하기 때문에, 온라인 공간(클라우드)에 파일을 올려놓고 그 파일의 주소를 복사하여 링크주소를 활용하면 용량 문제를 해결할 수가 있습니다.

그런데 이때 읽어오는 시간으로 인하여 약간의 지연현상이 발생하는 문제가 있습니다.

최초 읽어오기는 어쩔 수 없다하더라도 한 번 읽어서 폰에 그 파일을 저장하여 사용하면 시간 지연현상이 발생하지 않습니다. 그래서 그 방법을 공유해보고자 합니다.

일단은 클라우드에 파일을 올려 놓고 링크 주소를 확보합니다.

Connectivity[연결]에 있는 Web(웹) 컴포넌트를 추가합니다.

블록으로 코딩을 하는 방법입니다.

이때 두 가지만 유의하시면 됩니다.

외부저장소에 파일이 저장되기 때문에 Permission을 획득해야합니다.

그렇지 않으면 [Error 908: The permission Write_External_Storage has been denied...]에러가 발생합니다.

 

화면명[Screen1]을 클릭하면 [Ask For Permission]블럭이 있습니다.

웹에 클라우드에 있는 파일의 경로(URL을) 지정하고 Get처리합니다.

웹의 [Got File]블럭의 [file Name]을 변수 [임시]에 저장시킨 다음

화면 열기에서 startValue[시작 값]으로 지정해주는 것입니다.

 

그리고 새화면[Screen2]에서

이미지 컴포넌트에 [get start value]를 연결해주는 것입니다.

[get start value] 블럭은 [Control]에 있습니다.

그리고, 앱을 종료할 때 이 파일을 삭제해주는 것입니다.

이때 파일을 삭제하기 위해서는 별도로 확장콤포넌트(Extension)을 이용해야합니다.

 

https://downloads.sourceforge.net/project/puravidaapps/com.puravidaapps.TaifunFile.aix

위 링크를 클릭하여 [TaifunFile.aix]를 다운로드합니다.

 

앱종료시에 [Screen1]에서 [TaifunFile.aix]를 읽어들인 후

삭제 컴포넌트의 [fileName]에 아까 저장했던, 파일의 이름이 저장된 변수[임시]를 연결해주면 됩니다.

728x90
반응형
posted by P2SKLife
728x90
반응형

피아이어 베이스에 스토리지에 업로드한 파일을 코듈러에서 링크하여 읽어오려면 다음의 절차를 거쳐야 합니다.

그렇지 않으면 다음과 같은 에러가 발생하여 빌드가 되지 않습니다.

이때 [View log]를 클릭하면 

맨 밑에 Firebase config file error.라고 빌드가 중단된 사유가 확인됩니다.

즉, 파이어 배이스 스토리지를 사용하기 위한 콘피그 파일이 없어서 에러가 발생했다는 내용입니다.

그러면 콘피그 파일을 가져오는 방법을 알아보겠습니다.

 

당연히 먼저 파이어 베이스에 로그인 하고 다음 절차에 따라 파일[google-services.json]을 다운로드합니다.

이 파일을 코듈러의 애셋 매니저를 클릭하여 다운로드 받은 파일을 업로드합니다.

메뉴 중 우측에 톱니바퀴 모양의 좌측에 있는 것이 애셋 매니저 아이콘입니다. 이것을 클릭합니다.

그리고 upload asset을 클릭하여 다운 받은 파일을 클릭해서 업로드합니다.

이제 업로드한 파일의 링크 주소를 사용할 수 있는 준비가 되었습니다.

728x90
반응형
posted by P2SKLife
2021. 12. 24. 20:58 앱개발/코듈러,앱인벤터
728x90
반응형

먼저 파이어베이스에 파일을 업로드합니다.

파이어베이스 등록하는 방법은 아래링크를 참고하시면 됩니다.

 

 

코듈러(Kodular),앱인벤터(app inventor) 파이어베이스 스토리지(Firebase Storage) 등록하기

앱을 개발하다보면 사진, 오디오, 비디오 파일이 필요한 경우가 있는데 이 파일을 프로그램 안에 포함시키면 덩치가 커져서 문제가 발생합니다. 쉬운 예로 사이트에서 정해 놓은 용량이 있어서

2fpretty0911.tistory.com

 

등록을 하고 [파일 업로드]를 클릭하여 파일을 업로드합니다.

 

엡에서 사용하기 원하는 사진에 커서를 갖다대고 마우스 우클릭하면 팝업창이 뜨면서 [이미지 주소 복사]메뉴를 클릭합니다. 이제 앱을 돌아와서 아래와 같이 ㅅ스크린의 백그라운드에 빈 문자열 블록을 결합한 후 방금 복사한 이미지 주소를 붙여넣기 하면됩니다. 

이제 많은 그림으로 또는 동영상이이나 사운드 파일 등을 앱에 포함하지 않아도 활용할 수 있게 되었습니다.

 

728x90
반응형
posted by P2SKLife
2021. 12. 23. 11:34 앱개발/코듈러,앱인벤터
728x90
반응형

앱인벤터에는 광고(애드몹)을 추가할 수 없어서 코듈러(Kodular)에서 해야하는데, 이 광고 중에 배너광고를 추가하다보면 애드몹이 읽혀지기전에 잠깐 자리를 차지하지 않는 현상이 있습니다. 그래서 나머지 컴포넌트들이 위치가 변경되는 일이 발생하기도 합니다. 보기가 상당히 좋지 않습니다. 그래서 광고가 나오는 자리를 광고가 나오든 안나오든 자리를 차지하고 있도록 레이아웃을 설정해야 합니다. 이것을 해결하기 위한 방법으로는 아래 그림과 같이 광고 전용 레이아웃(가로 또는 세로)을 추가하여 그 안에 AdMob컴포넌트를 추가하고 레이아웃의 높이를 퍼센트로 고정시켜 놓으면 됩니다.

 

728x90
반응형
posted by P2SKLife
2021. 12. 22. 15:17 앱개발/코듈러,앱인벤터
728x90
반응형

1. API?

공공데이타를 활용하여 앱을 개발하려면 먼저 API란 무엇인지, 앱과 공공데이터는 어떻게 자료를 주고 받는지를 이해할 필요가 있습니다. API(Application Programming Interface)은 우리말로 번역하자면 "응용 프로그램 프로그래밍 인터페이스"라고 합니다. 예를 들어 파일 제어, 화상 처리, 문자 처리 등을 위한 인터페이스가 있다. 이와 같이 구글, 네이버, 카카오, 공공데이터포털 등과 같은 곳에서 어떤 자료를 처리하는 프로그램(인터페이스)를 만들고 외부 사용자가 소스는 터치하지 못하지만 해당 프로그램을 사용할 수 있게 하는 경우에 API를 만들어서 서로 자료를 주고 받게 하는 것입니다. 이 것을 개인이 사용할 수 있도록 오픈하는 경우에 개인이 요청자료를 해당 API가 정한 규칙에 맞춰서 요청자료를 보내주면 해당 API에서 응답자료를 보내주게되어 앱에서 개인이 활용할 수가 있습니다.

 

2. REST?

REST(Representational State Transfer)는 자원(이미지,동영상,DB 등)을 이름으로 구분해 해당 자원에 고유한 URI를 부여하고 활용하는 방법이라고 하겠습니다.

- Rest의 구성 : 자원(Resource), 행위(Verb), 표현(Representaion of Resource)

- 행위의 구분 : Get(읽기), Post(쓰기), Put(수정), Delete(삭제)

- Get방식 : 주소 뒤에 이름과 값이 결합된 형태. 255문자 이내만 가능

- Post방식 :인코딩하여 보내고 디코딩하여 받는 형태. 다량의 데이터 전송 가능

 

3. HTTP, GET, POST

- HTTP(Hypertext Transfer Protocol)는 웹클라이언트(사용자)와 웹서버간 데이터를 전송하는 약속

- GET과 POST는 이 HTTP에서 데이터를 주고 받는 7가지 메소드(방법)의 일부임

- HTTP통신할때는 Header와 Body영역으로 나뉘며 Header에는 여러가지 정보와 사용한 메소드의 종류에 대해서 기록하며 미소드 방식에 따라서 Body영역의 사용 유무 및 사용 방법이 달라짐

-GET방식 : URL에 Parameter를 붙여서 전송

  ex) http://p2sklife.tistory.com/test_api?param1=value&param2=value2 

    URL(사이트주소:URL(Uniform Resource Locator)뒤에 ?를 사용하여 Parameter를 작성하고, &를 붙여 여러개의 parameter를 구분함

    body영역이 없음. 대용량 전송에 제한(255자까지만 가능)

-POST방식:body영역에 데이터를 실어 보냄으로 길이 제한이 없음. 이때 Body영역의 데이터 타입을 Header Content-Type에 명시해야 함. URL을 통해 볼 수 없으므로 GET보다는 안전

  ex) Header 영역

       Content-Type:application/json;charset=UTF-8

       .....

      BODY 영역

      {

         "param1":"value1",

         "param2":"value2"

      }

 

4. JSON vs XML

 API를 사용하기 위해서 주고 받는 가장 대표적인 형식에 JSON과 XML이라는 것이 있습니다. 둘 다 어떤 구조화된 문서를 전송가능하게 만든 포맷(형식)인데, XML보다는 점차 JSON의 형식이 더 선호되고 있다고 하는데 아직은 두 방법이 같이 많이 사용되고 있습니다.

 

XML방식의 예                         JSON의 예

<bread>                               {

  <name>식빵</name>              "name":"식빵",

  <price>3000</price>               "price":"3000"

</bread>                              }

 

5. RSS?

RSS(Rich Site Summary 또는 Really Simple Syndication)는 뉴스나 블로그 사이트에서 주로 사용하는 콘텐츠 표현방식으로 웹사이트 내의 내용을 보여주는데 핻아 사이트를 직접 방문하지 않고 최신 정보만 골라서 볼 수 있도록 하기 위해 등장. XML을 기반으로 개발.

예)

<?xml version="1.0" encoding="UTF-8"?>

  <rss version="2.0">

     <channel>

       <title>제목</title>

       <link>주소</link>

       <description>설명 내용</description>

       <item>

          <title>제목</title>

          <link>주소</link>

          <description>설명 내용</description>

          <pubDate>시간</pubDate>

        </item>

     </channel>

 </rss>

728x90
반응형
posted by P2SKLife
2021. 12. 10. 17:39 앱개발/코듈러,앱인벤터
728x90
반응형
 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

기상위성 사진 데이터를 받아오기 위해서는 먼저 위 링크를 클릭해서 공공데이터포털에 로그인합니다.

아직 회원가입 안했으면 당연히 회원가입을 해야합니다.

 

검색어에 "기상위성"을 입력하여 검색합니다.

검색 결과에서 [오픈API]를 클릭하여

"기상청_위성영상 조회서비스"의 오른쪽 끝에 있는 [활용신청]을 클릭합니다.

해당 항목을 체크하고 [활용신청]을 클릭합니다.

 

메뉴 중 [마이페이지]를 클릭하면 [승인]된 목록이 보입니다.

목록에서 [기상청_위성영상 조회서비스]를 클릭합니다.

아래 그림에서 붉은네모를 친 부분의 일반 인증키를 메모장 등에 복사해둡니다..

이제 [상세설명]을 클릭합니다.

 

이제 요청키를 만드는 방법입니다.

ㅇ아래의 요청주소를 메모장에 복사합니다.

요청할 구문의 각 항목에 대한 내용을 잘 살펴봅니다.

위 블록에서 첫번째 줄이 [요청주소]이며

두번째 줄은 [일반인증키] 입니다.

세번째 줄은 페이지번호부터 지역구분까지의 내용입니다.

영상과 지역은 위 항목 설명에 있는 내용으로 수정하여 사용해도 됩니다.

그리고 마지막에 시간을 현재연월일로 읽는컴포넌트를 추가하여 결합한 블록입니다.

 

그러면 다음과 같은 기준의 출력결과물이 파일로 받아집니다.

 

여기서 파일배열 부분이 파싱을 하는 부분으로 나머지는 무시해도 됩니다.

저는 아래와 같은 방법으로 파싱을 했고

파싱한 그림파일의 링크주소를 리스트에 저장하였고

시간에 따라 한장씩 읽어서 마치 동영상처럼 보이도록 처리하였습니다.

클럭의 인터발 값과 인덱스 증가분을 수정하면 그림이 변하는 속도를 조절할 수 있습니다.

본인에게 맞는 값을 정하시면 될 것입니다만

너무 짧게 하면 인터넷으로 파일을 읽어오는데 약간의 버벅거림이 발생하기도 합니다.

이때 주의할 것은 시계 속성을 비활성화 시킨 후에 본 블럭처럼 구성해야 정상적인 처리가 가능합니다.

시계를 추가하기만 하면 그림자료도 없는데 보여주라는 꼴이 되어 에러가 발생하니 시계의 속성을 그림과 같이 변경해주어야 합니다.

728x90
반응형
posted by P2SKLife

728x90
반응형