이 사이트는 전자정부 표준프레임워크 구버전(1.0 ~ 4.3) 가이드 아카이브입니다. 내용은 더 이상 갱신되지 않습니다. 최신 내용은 최신 버전 문서에서 확인하세요.

모바일 디바이스 API 3.6

디바이스 파일관리 (DeviceFileMgmt) 디바이스API 가이드 프로그램

개요

디바이스 파일관리(DeviceFileMgmt) 가이드 프로그램은 디바이스 API 실행환경을 활용하여 하이브리드 앱을 개발 시 참고 및 활용될 수 있도록 구현된 전자정부 디바이스 API에 대한 가이드 앱으로써, 모바일 디바이스의 File Managment관련 기능을 JavaScript기반으로 구성 된 FileMgmt DeviceAPI를 통하여 디바이스 저장소 내의 폴더(디렉토리) 및 파일 관리(이동,삭제,복사) 기능을 지원한다.

특징

본 가이드 프로그램의 주요 기능으로 웹 서버와 연동하여 멀티미디어 목록 조회, 멀티미디어 재생 등의 기능을 제공하고 있다.
[참고] 본 디바이스 API는 저장소 내 디렉토리/파일 관리로 웹서버의 통신 및 연동을 하지 않는다.

기능흐름도

filemgmt_flow.png

전제 조건

전제 조건
구분 내용
Local 디바이스 개발 환경전자정부표준프레임워크 개발환경3.6, Android SDK API 23(version 6.0 Marshmallow)
서버 사이드 개발 환경전자정부표준프레임워크 개발환경3.6
Mash up Open API 연계N/A
테스트 디바이스 Galaxy S3, G5
테스트 플랫폼 Android 2.3, Android 6.0
추가 라이브러리 적용N/A

제약사항

제약사항
구분 내용
지원 디바이스 및 플랫폼N/A
크로스 도메인 사용폰갭에서 특정 외부 도메인이나 외부 도메인의 하위 도메인을 사용해야할 경우,
Res/xml/config.xml에서 <access origin=“” />에 외부 도메인 주소를 추가 설정해야 외부 도메인에 접속할 수 있다.
라이선스N/A

설명

디바이스 파일관리(DeviceFileMgmt) 디바이스API 가이드 프로그램은 저장소 디렉토리 조회, 디렉토리 생성, 디렉토리/파일 삭제, 디렉토리/파일 복사, 디렉토리/파일 이동 등의 기능으로 구성되어 있다.(관련기능 부분참조)

Device Application

관련 소스

관련 소스
유형대상소스명비고
Activitykr.go.egovframework.hyb.devicefilemgmtapp.MainActivity파일관리 API 가이드 프로그램 Activity Class
CSSassets/www/css/egovframwork/mbl/hyb/FileMgmt.css 파일관리 API 가이드 프로그램 주요 Cascading Style Sheets
IMAGE assets/www/images/egovframwork/mbl/hyb/ 파일관리 API 가이드 프로그램 주요 Image 폴더
JS assets/www/js/egovframwork/mbl/hyb/FileMgmt.js 파일관리 API 가이드 프로그램 주요 JavaScript
RES assets/www/res/ 파일관리 API 가이드 프로그램 주요 Resource 폴더
XML AndroidManiFest.xml 안드로이드 어플리케이션 설정 XML
HTMLassets/www/FileMgmt.html파일관리 API 메인 페이지
HTMLassets/www/intro.html파일관리API Intro 페이지
HTMLassets/www/license.html파일관리 API 라이센스 페이지
HTMLassets/www/overview.html파일관리 API 기능설명 페이지

활용 API

LocalFileSystem
  • 모바일 디바이스의 파일 시스템 정보를 최초 로드한다.
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onSuccess, onError);
LocalFileSystem
파라미터설명비고
LocalFileSystem.PERSISTENT사용자 또는 어플리케이션에 의해 제거 될 수 없는 스토리지를 조회 할 때 사용된다.
onSuccess파일 시스템 조회에 성공했을때 호출되는 콜백 함수
onError파일 시스템 조회에 실패 했을때 호출되는 콜백 함수
ResoveLocalFileSystemURL
  • Cordova(크로스플랫폼)에서 사용되는 로컬URL을 취득한다.
window.resolveLocalFileSystemURL(url, successCallback, errorCallback);
ResoveLocalFileSystemURL
파라미터설명비고
url로컬 fileEntry정보 예)
file:///example.txt
onSuccessfileEntry를 반환하는 콜백 함수
onError에러가 발생 시 호출되는 콜백 함수

Server Application

N/A
[참고] 디바이스 파일관리는 디바이스 기기내의 저장소 관리 앱으로 별도의 웹서버 연동을 하지 않는다.

환경설정

디바이스 파일관리(DeviceFileMgmt) 디바이스API 가이드 프로그램에서 제공하는 디렉토리/파일 관리(생성/삭제/복사/이동) 등의 기능을 활용하기 위하여 필요한 항목 및 그 환경 설정은 다음과 같다.

Device Application

res/xml/config.xml

    <feature name="File" >
        <param name="android-package" value="org.apache.cordova.file.FileUtils" />
        <param name="onload" value="true" />
    </feature>

res/values/serverinfo.xml

    <!--전자정부 Interface 디바이스 API에서 사용하기 위한 서버경로 설정-->
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
	<string name="SERVER_URL">http://192.168.100.222:8080/DeviceAPIGuideTotal_Web</string>
    </resources>

AndroidManifest.xml

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <permission android:name="kr.go.egovframework.hyb.devicefilemgmtapp.permission.C2D_MESSAGE" android:protectionLevel="signature" />
    <uses-permission android:name="kr.go.egovframework.hyb.devicefilemgmtapp.permission.C2D_MESSAGE" />

Server Application

N/A

관련기능

디바이스 파일관리(DeviceFileMgmt) API 가이드 프로그램은 크게 기기내 저장소의 디렉토리 생성, 디렉토리/파일 관리(삭제/복사/이동) 기능으로 구성되어 있다.

저장소 디렉토리/파일 목록 조회

비즈니스 규칙

  • 저장소의 디렉토리 및 파일을 조회한다.

[참고] 기본 저장소는 Android/data/<app-id>/ (externalApplicationStrorgeDirectory) 로 설정되어 있다.

관련 코드

미디어 목록 조회 및 화면표시
 window.requestFileSystem(LocalFileSystem.PERSISTENT, 0,
                             function(fs){ // success get file system
                             console.log('DeviceAPIGuide fn_egov_localStorageInfo Success');
                             fileSystem = fs;
                             
                             window.resolveLocalFileSystemURL(cordova.file.externalApplicationStorageDirectory,
                                                              function(destfs){ // success get file system
                                                              dirEntry = destfs;
                                                              rootDirEntry = destfs;
                                                              
                                                              }, null);
                             
                             }, null);

관련 화면

관련 화면
파일 Explorer 화면저장소 파일 조회 화면
filemgmt_menu.pngfilemgmt_rootdir.png

저장소 디렉토리 생성하기

비즈니스 규칙

  • 저장소에 새로운 디렉토리를 생성한다.

관련 코드

디렉토리명 입력
jPrompt('', 'Information', 'c',  function(r){
                if(r.length > 0){
                    $.mobile.loading("show");
                    fn_egov_Directory_Create(r);
                }else{
                    alert('디렉토리명이 입력되지 않았습니다.');
                }
                }
디렉토리 생성
function fn_egov_Directory_Create(tDirName){
      
    window.resolveLocalFileSystemURL(dirEntry.nativeURL,
                                function createDir(cdir) {cdir.getDirectory(tDirName,
                                    {create:true, exclusive: false},
                                    function success(re) {
                                        console.log(">>CreateDirectory Success!!");
                                        $.mobile.loading("hide");
                                        fn_egov_readDirectory();
                                    }, failFileProcess);
                                  }, failFileProcess);
    
}

관련 화면

관련 화면
저장소 조회새로운 디렉토리 명 입력새로운 디렉토리 생서
filemgmt_create1.pngfilemgmt_create2.pngfilemgmt_create3.png

저장소 디렉토리/파일 삭제

비즈니스 규칙

  • 저장소의 선택된 디렉토리(파일)을 삭제한다.

[참고] 기본 저장소는 Android/data/<app-id>/ (externalApplicationStrorgeDirectory) 로 설정되어 있다.

관련 코드

디렉토리(파일) 삭제 확인 화면
function fn_egov_fileDir_Delete() {
    
    console.log(">>> fn_egov_fileDir_Delete Start <<<");
    
    chboxes = document.getElementsByName("checkboxes");
    
    console.log("chboxes.length:"+ chboxes.length);
    
    var vR = false;
    for(var i=0; i < chboxes.length ; i++){
        if(chboxes[i].checked) vR = true;
    }
    
    if(vR){
        jConfirm('선택된 파일(폴더)를 삭제하시겠습니까?', '파일/폴더 삭제', 'c', function(r) {
                 if (r == true) {
                    chboxesCount = chboxes.length -1;
                    $.mobile.loading("show");
                    fn_egov_request_fileDir_Delete();
                 }
                 });
    }else{
        jAlert('선택된 파일(폴더)이 없습니다.','Information','c',null);
    }   
}
디렉토리(파일) 삭제
function fn_egov_request_fileDir_Delete() {
    
    if(chboxesCount > -1 && chboxes[chboxesCount].checked){
        var fileName = chboxes[chboxesCount].value;
        console.log(">>fileName:" + fileName);
        
        window.resolveLocalFileSystemURL(dirEntry.nativeURL + fileName,
                                         function onSuccess(fEntry){
                                         
                                            if(fEntry.isDirectory){
                                                fEntry.removeRecursively(function() {
                                                                            console.log(">>Remove Directory Succeeded");
                                                                        }, failFileProcess);
                                            }else {
                                                fEntry.remove(function() {
                                                              console.log(">>Remove File Succeeded");
                                                       }, failFileProcess);
                                            }
                                            chboxesCount = chboxesCount-1;
                                            fn_egov_request_fileDir_Delete();
                                         
                                         }, failFileProcess);
        
    }else if (chboxesCount > -1 && !chboxes[chboxesCount].checked){
        chboxesCount = chboxesCount-1;
        fn_egov_request_fileDir_Delete();
        
    }else{
        $.mobile.loading("hide");
        fn_egov_readDirectory();
    }

}

관련 화면

관련 화면
디렉토리 선택디텍토리(파일) 삭제 메뉴 삭제 확인 화면 디렉토리 삭제 후 화면
filemgmt_delete1.pngfilemgmt_delete2.pngfilemgmt_delete3.pngfilemgmt_delete4.png

저장소 디렉토리/파일 복사

비즈니스 규칙

  • 저장소의 파일을 다른 디렉토리로 복사한다.

[참고] 기본 저장소는 Android/data/<app-id>/ (externalApplicationStrorgeDirectory) 로 설정되어 있다.

[참고] 디렉토리 복사 시 디렉토리 내 파일들 모두 복사를 한다. (복수 파일 복사 가능)

관련 코드

선택된 파일 복사 확인 및 디렉토리 경로 선택
 function fn_egov_fileDir_Copy() {
    
    console.log(">>> fn_egov_fileDir_Copy Start <<<");
    
    chboxes = document.getElementsByName("checkboxes");
    console.log("chboxes.length:"+ chboxes.length);
    
    var vR = false;
    for(var i=0; i < chboxes.length ; i++){
        if(chboxes[i].checked) vR = true;
    }
    
    if(vR){
        chboxesCount = chboxes.length -1;
        processType = _pType_Copy;
        fn_egov_move_localStorage_PanelMenu();
        
    }else{
        jAlert('선택된 파일(폴더)이 없습니다.','Information','c',null);
    }
    
}
//복사할 디렉토리 선택 화면
function fn_egov_move_localStorage_PanelMenu(){
    
    console.log("Open PanelMenu Start");
    
    panelDirEntry = dirEntry;
    
    fn_egov_readDirectory_Panel();
    
    $.mobile.activePage.find('#componentMenu').panel("open");
    
}
선택된 파일 복사
 function fn_egov_request_fileDir_Copy(pEntry) {
    
    if(chboxesCount > -1 && chboxes[chboxesCount].checked){
        
        var fileName = chboxes[chboxesCount].value;
        console.log(">>fileName:" + fileName);
        
        window.resolveLocalFileSystemURL(dirEntry.nativeURL + fileName,
                                         function onSuccess(fEntry){
                                         fEntry.copyTo(pEntry, fileName,
                                                       function succ(s) {
                                                       console.log('copying successful ['+chboxesCount+']' );
                                                       chboxesCount = chboxesCount-1;
                                                       fn_egov_request_fileDir_Copy(pEntry);
                                                       }, failFileProcess);
                                         }, failFileProcess);
    }else if (chboxesCount > -1 && !chboxes[chboxesCount].checked){
        chboxesCount = chboxesCount-1;
        fn_egov_request_fileDir_Copy(pEntry);
        
    }else{
        $.mobile.loading("hide");
        $.mobile.activePage.find('#componentMenu').panel("close");
        fn_egov_readDirectory();
    }
}

관련 화면

관련 화면
복사 파일 선택 화면 복사 메뉴 화면 복사할 경로 선택 복사 파일 화면
filemgmt_copy1.pngfilemgmt_copy2.pngfilemgmt_copy4.pngfilemgmt_copy5.png

저장소 디렉토리/파일 이동

비즈니스 규칙

  • 저장소의 디렉토리 및 파일을 조회한다.

[참고] 기본 저장소는 Android/data/<app-id>/ (externalApplicationStrorgeDirectory) 로 설정되어 있다.

관련 코드

선택된 파일 이동 확인 및 디렉토리 경로 선택
function fn_egov_fileDir_Move() {
    
    console.log(">>> fn_egov_fileDir_Move Start <<<");
    
    chboxes = document.getElementsByName("checkboxes");
    console.log("chboxes.length:"+ chboxes.length);
    
    var vR = false;
    for(var i=0; i < chboxes.length ; i++){
        if(chboxes[i].checked) vR = true;
    }
    
    if(vR){
        chboxesCount = chboxes.length -1;
        processType = _pType_Move;
        
        fn_egov_move_localStorage_PanelMenu();
        
    }else{
        jAlert('선택된 파일(폴더)이 없습니다.','Information','c',null);
    }
}
선택된 파일 이동
function fn_egov_request_fileDir_Move(pEntry) {
    
    if(chboxesCount > -1 && chboxes[chboxesCount].checked){        
        var fileName = chboxes[chboxesCount].value;
        console.log(">>fileName:" + fileName);
        
        window.resolveLocalFileSystemURL(dirEntry.nativeURL + fileName,
                                         function onSuccess(fEntry){
                                         fEntry.moveTo(pEntry, fileName,
                                                       function succ(s) {
                                                       console.log('moveing successful ['+chboxesCount+']' );
                                                       chboxesCount = chboxesCount-1;
                                                       fn_egov_request_fileDir_Copy(pEntry);
                                                       }, failFileProcess);
                                         }, failFileProcess);
    }else if (chboxesCount > -1 && !chboxes[chboxesCount].checked){
        chboxesCount = chboxesCount-1;
        fn_egov_request_fileDir_Move(pEntry);        
    }else{
        $.mobile.loading("hide");
        $.mobile.activePage.find('#componentMenu').panel("close");
        fn_egov_readDirectory();
    }    
}

관련 화면

관련 화면
이동할 파일 선택 화면 이동 메뉴 선택 화면 이동 경로 선택 화면 이동 파일 결과 화면
filemgmt_move1.pngfilemgmt_move2.pngfilemgmt_move3.pngfilemgmt_move4.png

컴파일 디버깅 배포

컴파일

Device Applicaton 컴파일 방법

  • 프로젝트 선택 > 오른쪽 클릭 > Run As > Android Application

카메라_컴파일1.png

  • 상단의 메뉴 > Run As > Android Application

카메라_컴파일2.png

  • 실행할 타겟 선택 > 에뮬레이터, 디바이스(디버깅모드)

디바이스컴파일.png

  • 디바이스를 이용한 실행 화면

filemgmt_run.png

Server Applicaton 컴파일 방법

  • 서버사이드 가이드 프로그램의 실행은 프로젝트를 마우스 오른쪽 버튼을 클릭 한후 Run As>Run On Server 버튼을 통해 실행 할 수 있다.

서버실행.png

  • 빌드가 성공적으로 수행 되면 이클립스의 콘솔 창에서 'Server Startup in xxx ms' 메시지를 확인 할 수 있다.

서버실행결과_콘솔.png

디버깅

디바이스 어플리케이션에서 발생한 오류 내용 확인 및 디버깅을 위해서는 폰갭 프레임워크에서 제공하는 console.log를 이용할 수 있다. console.log 함수는 자바스크립트 구문에서 사용할 수 있는 디버그 코드로 이클립스 및 Xcode에서 확인 할 수 있다.

console.log의 작성 방법의 예시는 다음과 같다.

function fn_egov_network_check(doCheck)
{
    console.log('DeviceAPIGuide fn_egov_network_check');
    var networkState = navigator.network.connection.type;
    ...
}

디버깅 코드가 실행 되면 아래와 같은 메시지를 개발도구의 콘솔 메시지 창에서 볼 수 있다.

filereadwriteconsolelog.png

배포

디바이스 파일관리(DeviceFileMgmt) 디바이스 API 가이드 다운로드 : Click 새 창 열림

참고자료

원본 페이지 ID
egovframework:hyb3.6:guide:add:devicefilemgmt
원본 수정일