목차

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

개요

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

특징

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

기능흐름도

전제 조건

구분 내용
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.PERSISTENT사용자 또는 어플리케이션에 의해 제거 될 수 없는 스토리지를 조회 할 때 사용된다.
onSuccess파일 시스템 조회에 성공했을때 호출되는 콜백 함수
onError파일 시스템 조회에 실패 했을때 호출되는 콜백 함수
ResoveLocalFileSystemURL
window.resolveLocalFileSystemURL(url, successCallback, errorCallback);
파라미터설명비고
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 화면저장소 파일 조회 화면

저장소 디렉토리 생성하기

비즈니스 규칙

관련 코드

디렉토리명 입력
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);
    
}

관련 화면

저장소 조회새로운 디렉토리 명 입력새로운 디렉토리 생서

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

비즈니스 규칙

[참고] 기본 저장소는 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();
    }

}

관련 화면

디렉토리 선택디텍토리(파일) 삭제 메뉴 삭제 확인 화면 디렉토리 삭제 후 화면

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

비즈니스 규칙

[참고] 기본 저장소는 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();
    }
}

관련 화면

복사 파일 선택 화면 복사 메뉴 화면 복사할 경로 선택 복사 파일 화면

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

비즈니스 규칙

[참고] 기본 저장소는 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();
    }    
}

관련 화면

이동할 파일 선택 화면 이동 메뉴 선택 화면 이동 경로 선택 화면 이동 파일 결과 화면

컴파일 디버깅 배포

컴파일

Device Applicaton 컴파일 방법

Server Applicaton 컴파일 방법

디버깅

디바이스 어플리케이션에서 발생한 오류 내용 확인 및 디버깅을 위해서는 폰갭 프레임워크에서 제공하는 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;
    ...
}

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

배포

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

참고자료