2010-11-03 23 views

Répondre

4

Vous ne pouvez pas faire cela à partir d'une application Android, sauf sur un téléphone enraciné, car vous n'êtes pas autorisé à accéder au périphérique framebuffer.

Vous pouvez cependant le faire via adb à partir de la fenêtre DDMS de votre machine de développement, car adb s'exécute dans le groupe graphique qui a l'autorisation du framebuffer.

Si vous voulez faire quelque chose de similaire en code natif sur un périphérique enraciné, regardez les sources du démon adb.

EDIT: Il semble que cela puisse changer et il peut y avoir des fonctionnalités non-root dans les versions plus récentes d'Android, mais je ne suis pas sûr des détails.

+0

qui est manifestement incorrect. pourquoi quelqu'un serait upvote cette réponse est déconcertante. –

+2

@ Dr.Dedel C'est en fait tout à fait correct. Voir la propriété du groupe et les autorisations sur le fichier du périphérique framebuffer, et le fait qu'aucun code utilisateur activé localement sur un périphérique sécurisé n'est capable de s'exécuter dans le groupe nécessaire. Si vous parlez aux architectes android à ce sujet, il a été décidé de ne pas laisser les applications prendre des captures d'écran. –

+0

mais les applications peuvent prendre des captures d'écran. Ils ne le font tout simplement pas via le tampon d'écran. Donc, peut-être que cette méthodologie sera désactivée à un moment donné (improbable), mais en attendant, votre réponse est en fait quelque peu trompeuse car vous ne fournissez pas la mise en garde (évidente) que si l'intention est simplement de prendre un claquement de ce qui est sur l'écran, il n'y a pas besoin d'avoir un appareil enraciné pour cela et dans la plupart des cas c'est un total de 5 lignes de code. –

1

Voici un exemple de conversion d'une vue en bitmap. Il suffit d'attraper votre vue de dessus et d'y être. Cela fonctionne absolument et vous n'avez ABSOLUMENT pas besoin d'avoir un appareil enraciné pour cela!

http://www.brighthub.com/mobile/google-android/articles/30676.aspx

+2

Capture une vue, pas l'écran lui-même. Pour certaines raisons, cela peut être suffisant et donc utile. Mais il est assez bien connu dans la communauté des développeurs que vous ne pouvez pas capturer le tampon d'écran réel à partir d'une application sur un périphérique sécurisé. –

+0

Je pense que dans le but de cette question, il suffit de lui donner des conseils sur la façon de saisir la vue parente (qui à tous égards est le tampon d'écran). Donc, vous avez techniquement raison, mais je pense qu'il ne formule tout simplement pas sa question parfaitement. Ce qu'il veut (je pense) est simplement de prendre une capture d'écran bitmap de ce qui se passe sur son écran, ce qui est à la fois trivial et ne nécessite pas de permissions root. –

+5

Mon soupçon est qu'il veut capturer l'écran d'une autre application. Si c'était sa propre application, l'utilisation de la capture d'écran intégrée à DDMS est la plus rapide - pas besoin d'écrire une seule ligne de code. Votre suggestion serait plus utile s'il avait besoin d'expédier une application avec la capacité intégrée pour capturer l'essence de sa propre interface utilisateur sur l'appareil de l'utilisateur. –

0

essayer quelque chose comme ceci:

View v1=childView.getRootView(); 
v1.setDrawingCacheEnabled(true); 
Bitmap bm=v1.getDrawingCache(); 
if(bm!=null){ 
    //save the file 
}