Wie macht Android Screenshots?

7

Ich weiß, wie man einen Screenshot macht, aber ich habe mich gefragt, wie es funktioniert.

Zumindest seit Android 4.0 konnten Sie einen Screenshot machen, indem Sie beide Lautstärketasten gedrückt halten und Android den aktuellen Bildschirm aufnehmen und auf der SD-Karte speichern.

Ich frage mich nur, ob jemand weiß, WIE das funktioniert, wie in, wenn es ein Dienst ist, der ständig im Hintergrund läuft oder etwas in jeder App eingebaut ist, oder. Wo befindet es sich auch im Quellcode von Android?

Danke!

    
Patrick Mahoney 01.11.2012, 15:44
quelle

4 Antworten

1
___ qstnhdr ___ Wie macht Android Screenshots? ___ antwort13181198 ___

Die Android-Anwendung verwendet Absichten, um Ressourcen auf Systemebene aufzurufen. Zum Beispiel - der Großteil der Software zum Betrieb der Kamera wird vom Betriebssystem bereitgestellt. Android OS basiert auf dem Unix / Linux Kernel und die Kamera würde so aussehen.

  1. Eine Anwendung / ein Prozess entscheidet, dass sie die Kamera verwenden möchte.
  2. Diese Anwendung / dieser Prozess erstellt eine Absicht und übergibt sie an das Betriebssystem.
  3. Die Absicht wird vom Betriebssystem verarbeitet und die Kamerasoftware wird in einem neuen Prozess ausgeführt (exec). Der aufrufende Prozess kann ihn entweder blockieren, wenn er die Absicht synchron aufruft, oder er kann asynchron ausgeführt werden, und sowohl die aufrufende als auch die aufgabengesteuerte Anwendung können gleichzeitig ausgeführt werden. Im Beispiel einer Kamera wird sie wahrscheinlich synchron aufgerufen und blockiert.
  4. Der Kamera-Prozess wird vom Benutzer verwendet, um ein Bild aufzunehmen.
  5. Der Kamera-Prozess wird beendet und erzeugt entweder einen Fehler oder ein Bild.
  6. Das Betriebssystem führt einige ipc (interprocess communication) aus, um das Bild an den aufrufenden Prozess zurückzugeben. Die Entscheidung, ob Pipes oder Message-Passing verwendet werden sollen, hängt vom Betriebssystem ab, basierend auf der Art der Absicht, die von der Anwendung aufgerufen wird. Eine Kamera wird wahrscheinlich die Nachrichtenübergabe verwenden, da der Elternprozess blockiert wird, während der Kindprozess ausgeführt wird.
  7. Jetzt wird der aufrufende Prozess, der das Warten auf die Rückkehr abblockt, vom Betriebssystem geweckt und in einen aktiven Zustand versetzt.
  8. Das Bild wurde an die aufrufende Anwendung zurückgegeben, damit es wie gewünscht verwendet werden kann.

Wenn Sie einen Screenshot machen, passiert genau das. Es gibt einen Prozess, der ausgeführt wird, um die Benutzeroberfläche zu handhaben. Es sitzt im Grunde und wartet auf Eingaben und Filter für alles, was vom Betriebssystem interpretiert werden sollte, bevor es an die aktuell laufende Anwendung weitergeleitet wird. Dies ist eine weitere Unix-Konvention, die an diesem Punkt Standard in jedem Betriebssystem ist, das ich mir vorstellen kann - Pipe-Eingangsströme. Es ermöglicht dem Betriebssystem, Eingaben mit höherer Priorität zu erfassen, z. B. Befehle zur Betriebssystemsteuerung, bevor sie an Anwendungen übergeben werden. (Denken Sie in Windows an ctrl-alt-delete oder in unix an ctrl-c / ctrl-z.) Wenn die Screenshot-Tasten gedrückt werden, führt dieser Upstream-io-Prozess ein spezielles Programm aus, um einen Screenshot (via intent) und den Befehl aufzunehmen wird nie wirklich an die 'laufende' Anwendung übergeben. Dieses Programm wird in einem neuen Prozess (exec) ausgeführt, erstellt ein Bitmap des Bildschirms, speichert es im Galerieraum und stirbt - alles asynchron zum Timing des Zeitgebers, so dass das Telefon die ganze Zeit über reagiert. Sie sehen in John Bokers den Quellcode mit all den GORP zu beantworten, um dies zu implementieren.

    
___ answer13180900 ___

Beim Durchsuchen des Quellcodes habe ich den Abschnitt gefunden, der auf die Tastenkombination wartet und den Prozess startet:

Hier ist der spezifische Code:

Ссылка

    
___ tag123android ___ Android ist das mobile Betriebssystem von Google, das zum Programmieren oder Entwickeln von digitalen Geräten (Smartphones, Tablets, Automobile, Fernseher, Wear, Glass, IoT) verwendet wird. Verwenden Sie für Themen rund um Android Android-spezifische Tags wie android-intent, nicht intent, android-activity, nicht activity, android-adapter, nicht adapter usw. Bei anderen Fragen als der Entwicklung oder Programmierung, aber im Zusammenhang mit Android Framework, verwenden Sie Der Link: https://android.stackexchange.com. ___ answer13180958 ___

Wenn Sie nur einen Screenshot machen möchten, der sehr einfach ist:

%Vor%

rufe einfach diese Methode mit der Ansicht auf, von der du einen Schnappschuss von .. möchtest. Wenn du also den ganzen Bildschirm sehen willst, gib einfach die oberste %code% ein. Wenn Sie die Systemsteuerelemente auch nur aufrufen möchten:

%Vor%

Wenn Sie sich jetzt fragen, wie die "Lautstärke-Absenk- + Power-Tasten" funktionieren, die tiefer im Betriebssystem sind, als Sie auch Zugriff haben. Es gibt keine Möglichkeit, den Netzschalter von einem APK AFAIK abzufangen.

    
___ answer13180996 ___

Ich habe gerade den Code im Quellbaum gefunden: Ссылка

Ich denke, es ist nur eine Frage des Durchlesens, um den Prozess besser zu verstehen.

    
___ tag123screenshot ___ Ein Screenshot, eine Bildschirmaufnahme oder ein Bildschirmabzug ist ein Bild, das vom Computer aufgenommen wurde, um die sichtbaren Objekte auf dem Monitor oder einem anderen visuellen Ausgabegerät aufzuzeichnen ___ qstntxt ___

Ich weiß, wie man einen Screenshot macht, aber ich habe mich gefragt, wie es funktioniert.

Zumindest seit Android 4.0 konnten Sie einen Screenshot machen, indem Sie beide Lautstärketasten gedrückt halten und Android den aktuellen Bildschirm aufnehmen und auf der SD-Karte speichern.

Ich frage mich nur, ob jemand weiß, WIE das funktioniert, wie in, wenn es ein Dienst ist, der ständig im Hintergrund läuft oder etwas in jeder App eingebaut ist, oder. Wo befindet es sich auch im Quellcode von Android?

Danke!

    
___
gbtimmon 01.11.2012, 16:17
quelle
9

Beim Durchsuchen des Quellcodes habe ich den Abschnitt gefunden, der auf die Tastenkombination wartet und den Prozess startet:

Hier ist der spezifische Code:

Ссылка

    
John Boker 01.11.2012 16:02
quelle
6

Ich habe gerade den Code im Quellbaum gefunden: Ссылка

Ich denke, es ist nur eine Frage des Durchlesens, um den Prozess besser zu verstehen.

    
Patrick Mahoney 01.11.2012 16:06
quelle
6

Wenn Sie nur einen Screenshot machen möchten, der sehr einfach ist:

%Vor%

rufe einfach diese Methode mit der Ansicht auf, von der du einen Schnappschuss von .. möchtest. Wenn du also den ganzen Bildschirm sehen willst, gib einfach die oberste ViewGroup ein. Wenn Sie die Systemsteuerelemente auch nur aufrufen möchten:

%Vor%

Wenn Sie sich jetzt fragen, wie die "Lautstärke-Absenk- + Power-Tasten" funktionieren, die tiefer im Betriebssystem sind, als Sie auch Zugriff haben. Es gibt keine Möglichkeit, den Netzschalter von einem APK AFAIK abzufangen.

    
JustinMorris 01.11.2012 16:04
quelle

Tags und Links