2013-12-18 2 views
0

adb push를 사용하여 파일을 Android 기기로 전송합니다. 나는 SD 카드에 파일을 밀어 수 있어요, 그리고 명령 줄은 나에게 전송 속도, 파일 크기, 시간 경과, 예를 들어 이야기 : 내가 구독 할 수 있습니다 응용 프로그램이나 서비스를 만들 찾고 있어요Android 앱에서 ADB 상태 이벤트 수신

C:\Users\some_guy\Pictures>adb -d push wilford.jpg /sdcard/wilford.jpg 
2558 KB/s (13104 bytes in 0.005s) 

을 브로드 캐스트 리시버를 통해 이벤트를 수신하여 adb 푸시가 시작되고 업데이트가 완료되면 업데이트를 받고, 전송이 진행되는 동안 현재 파일 전송 속도를 포함합니다. 따라서 파일이 adb에서 작성되면 응용 프로그램에 현재 완료율과 전송률을 알립니다. 이것이 가능한가? 필요한 사용 권한과 응용 프로그램이 업데이트를 구독하는 방법은 무엇입니까? 권한 및 기타 리소스 목록을 살펴본 결과이를 수행 할 방법을 찾을 수 없습니다.

또 다른 가능성은 들어오는 파일에 대한 SD 카드 파일 시스템을 모니터링하는 것이지만, 새 파일이 완전히 기록 될 때 모니터링을 넘어서 무엇을 제공 할 지 확신 할 수 없습니다.

답변

1

나는 매우 비슷한 문제를 가지고 있었고, 나는 모든 옵션을 소진했다. adb push 프로세스의 일부로 방송이 없습니다. 그러나 각 푸시 전후에 자신 만의 브로드 캐스트를 만들려면 adb shell am broadcast ...을 사용하고 추가 기능 (예 : 파일 이름 또는 전송률)을 보낼 수도 있습니다.

bash 또는 python을 사용하여 Windows 배치 파일 대신 adb 전송을 스크립팅하면이 작업이 더 쉬울 것입니다. SDK 도구에 포함 된 MonkeyRunner에 대한 자이 썬 구현을 사용하여 위로 감았을뿐입니다. 쉘은 MonkeyRunner가 제공하지 않기 때문에 실제 파일 푸시를 수행합니다.

+0

adb push가 진행되는 동안 adb 쉘을 방송 할 수 있습니까? 푸시가 끝날 때뿐만 아니라 완료율 및 전송 속도의 상태를 제공하고 싶습니다. –

+0

여러 개의 adb 세션을 동시에 실행할 수 있다고 생각합니다. –

1

적어도 대상 디렉토리의 Linux 커널 inotify 메커니즘을 사용하여 새 파일을 감지 할 수 있습니다.

안드로이드는 FileObserver 클래스를 통해이 기능을 노출 :

모니터 파일 (본 프로그램 포함) 파일이 장치에있는 모든 프로세스에서 접근하거나 변경 한 후 이벤트를 발생하기 위해 (inotify를 사용). FileObserver는 추상 클래스입니다. 서브 클래스는 onEvent (int, String) 이벤트 핸들러를 구현해야합니다.

각 FileObserver 인스턴스는 단일 파일 또는 디렉토리를 모니터합니다. 디렉토리가 모니터되는 경우, 모니터되는 디렉토리 내의 모든 파일과 서브 디렉토리에 대한 이벤트가 트리거됩니다.

는 메커니즘이 디렉토리 모니터 디렉토리 만 entires하지 하위 디렉토리에 항목을 모니터링한다는 점에서 재귀 아니라고 http://developer.android.com/reference/android/os/FileObserver.html

참고를 참조하십시오. 이 question은 몇 가지 재귀 적 가능성에 대해 설명합니다.

+0

파일 작성 중임을 알려주는지 확실하지 않습니다. 이것이 수정 마스크일까요? 또한, 그것은 당신에게 쓰여지는 양이나 그것이 쓰여지는 속도에 관해 아무것도주지 않습니다. –

+0

나는 기본 파일 시스템이 진행중 쓰기에서 어떻게 처리 할지는 정확히 모르겠지만 일단 생성 된 디렉토리를 보게되면 주기적으로 파일 크기를 모니터링 해 볼 수 있습니다. ADB는 최종 사용자를위한 도구는 아니지만 기억하십시오.정말로 앱을 포함하고 싶다면 unix-domain 또는 tcp 소켓을 adb를 통해 전달하고,이를 통해 모니터링 응용 프로그램에 데이터를 보내고 파일을 쓰게 할 수 있습니다. –

+0

파일 브라우저 앱을 사용하면 파일이 전송 완료 후 SD 카드에 쓰여지고 시간이 지남에 따라 크기가 커진다는 것을 알 수 있습니다. 필자는 주기적으로 (파일 쓰기가 완료 될 때까지) 파일 크기를 폴링하고 경과 된 시간으로 나누어 전송 속도를 인위적으로 얻어야 ​​할 수도 있습니다. 편집 : 죄송합니다, 최근에 귀하의 최근 댓글을 발견했습니다. 예, 아마도 소켓이 더 간단 해져서 디버그 권한을 사용하지 않아도됩니다. 말했듯이, 그것은 최종 사용자를위한 것이 아닙니다. –

관련 문제