NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# C# .NET 매크로 프로그램 만들기. (안드로이드 기기에 파일 업로드 및 다운로드 with ADB 4부)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 안드로이드 휴대폰을 제어하는 방법을 앞에서 많이 알아봤는데요. 이번에는 간단하게 파일을 업로드하고, 다운로드 하는 방법에 대해 알아보도록 하겠습니다. 그리고, 앞서 만든 코드에서 비효율적인 내용들이 있어서 리팩토링 작업도 해주었습니다. 이 부분은 나중에 알아보기로 하고, 파일 업로드와 다운로드에 대해서 알아볼께요.

     

    코드는 앞서 작성한 내용과 동일합니다. switch ~ case에서 Upload와 Download에 아래 코드를 작성하면 됩니다.

    case Definition.AdbCommand.Upload:
        using (SyncService service = new SyncService(new AdbSocket(player.Manager.AdbInfo.ADB.EndPoint), device))
        {
            using (Stream stream = File.OpenRead(SelectFile))
                service.Push(stream, $"{DeviceFilePath}/{Path.GetFileName(SelectFile)}", FilePermission, DateTimeOffset.Now, null);
        }
        break;
    case Definition.AdbCommand.Download:
        using (SyncService service = new SyncService(new AdbSocket(player.Manager.AdbInfo.ADB.EndPoint), device))
        {
            using (Stream stream = File.OpenWrite(SelectFile))
                service.Pull($"{DeviceFilePath}/{Path.GetFileName(SelectFile)}", stream, null);
        }
        break;

     

    명령을 업로드로 해놓고, 바탕화면에 있는 파일을 선택했어요.

    aGHIQlZ.png

     

     

    파일을 업로드할 안드로이드 휴대폰을 SCRCPY로 미리 실행 해두었습니다.

    NyyFWzV.png

     

     

    완성된 코드를 테스트 해볼까요? 아래 동영상과 같이 윈도우 바탕화면에 있는 파일을 업로드하고, 다운로드도 해보세요.

     

     

    오늘 작성한 코드를 보면 알겠지만, 각각의 디바이스에 파일을 업로드 하는건 문제가 안될듯 합니다. 하지만, 다운로드의 경우에는 문제가 되겠죠? 왜냐하면 동일한 파일의 이름을 한군데에 다운로드 받기 때문입니다. 업로드는 각각의 기기마다 파일을 올리기 때문에 문제가 되지는 않을겁니다. 각각의 안드로이드폰이 윈도우로 치면 폴더처럼 나뉘어져 있으니까요.

     

    그래서, 이 문제를 어떻게 해결해야 할까요? 그렇습니다. 다운로드 받는 경우에는 다운로드 파일명 앞에 디바이스 시리얼을 붙여주면 될거 같습니다. 코드가 약간 지저분해졌지만, 어떻게 동작하는지는 직관적으로 이해할 수 있습니다. 파일명과 확장자를 분리하고, 경로도 추출해줍니다. 그리고, 파일명과 확장자 사이에 디바이스의 시리얼을 추가 해줬습니다. 만약, 디바이스가 하나라면 굳이 파일명을 변경할 필요는 없습니다.

    case Definition.AdbCommand.Download:
        using (SyncService service = new SyncService(new AdbSocket(player.Manager.AdbInfo.ADB.EndPoint), device))
        {
            string downloadPath = SelectFile;
            if (devices.Count() > 1)
            {
                string fileName = Path.GetFileNameWithoutExtension(downloadPath);
                string ext = Path.GetExtension(downloadPath);
                string dirPath = Path.GetDirectoryName(downloadPath);
                downloadPath = Path.Combine(dirPath, $"{fileName}_{device.Serial}{ext}");
            }
    
            using (Stream stream = File.OpenWrite(downloadPath))
                service.Pull($"{DeviceFilePath}/{Path.GetFileName(SelectFile)}", stream, null);
        }
        break;

     

    이 내용을 테스트하는 방법은 아래 동영상을 참고 해주세요.

     

     

    이 글이 도움이 되셨다면~ 커피 한잔이라도 후원 부탁드립니다^^

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.