2011-12-26 2 views
6

Я работаю над приложением на Android, которое поделится экраном с другим устройством Android. Это приложение будет работать в фоновом режиме в качестве сервиса.Выполнение скриншота текущего экрана

Я хочу захватить экран (текущий экран), сохранить его как JPEG и постоянно отправлять его по UDP на другое устройство Android.

Но моя проблема заключается в том, как захватить текущий экран, захватив фреймбуфер.

Пожалуйста, помогите.

ответ

3

Вы можете взять скриншот макета, позволяя

setDrawingCacheEnabled(true); 

представления.

Проверить этот link

+0

Спасибо. Но это только даст скриншот моего приложения view.I хочу захватить все, что появляется на экране, когда мое приложение работает в фоновом режиме – user1095154

+0

вы хотите скриншот фоновой службы ... что я не знаю ... надеюсь, что кто-то поможет вам –

7

андроида фреймбуфера (и в других системах Linux) доступен при открытии/Dev/Графика/устройство fb0. Для этого требуется root-доступ, и даже при использовании root он не будет работать должным образом на всех устройствах. Большинство устройств используют пару фреймбуферов и переключаются между ними. Большая проблема заключается в том, что даже с помощью корневого телефона идентификатор пользователя машины Dalvik не имеет права доступа к устройству буфера кадров (fb0). Это означает, что вы никогда не сможете открывать и читать с устройства fb0 непосредственно из кода Java. Вам нужно будет запустить собственное приложение linux с правами root, и он сможет получить доступ к fb0 (после того, как пользователь даст разрешение). Мне удалось сделать эту работу, и это довольно сложно, а также нахмурило Google. Я все же могу потенциально превратить это в коммерческое приложение, но ограничения и несовместимости делают вероятность довольно низкой.

+0

Привет, BitBank, Спасибо за ваш ответ. – user1095154

+1

Я использовал ссылку http://www.pocketmagic.net/?p=1473 для доступа к буферам кадров. Но когда я использую тот же код, используя службу для непрерывных скриншотов, я получаю проблему с памятью. Но когда я захватываю один экран, используя активность, тогда нет ошибки памяти. Can u help – user1095154

+0

Вы сопоставляете и деактивируете память фреймбуфера, или вы держите указатель на нее и используете ее несколько раз? Я смог непрерывно захватить экран, оставив fb0 открытым, пока я его использовал. – BitBank

Смежные вопросы