Meine Hauptaktivität enthält Code, der einige Datenbankänderungen vornimmt, die nicht unterbrochen werden sollten. Ich mache das schwere Heben in einem anderen Thread und verwende einen Fortschrittsdialog, den ich als nicht stornierbar festgelegt habe. Ich habe jedoch festgestellt, dass beim Drehen meines Telefons die Aktivität neu gestartet wird, die für den ausgeführten Prozess WIRKLICH schlecht ist, und ich erhalte ein Force Close.
Ich möchte Änderungen der Bildschirmausrichtung programmgesteuert deaktivieren, bis mein Prozess abgeschlossen ist. Zu diesem Zeitpunkt werden Änderungen der Ausrichtung aktiviert.
android
screen-orientation
android-orientation
Christopher Perry
quelle
quelle
Antworten:
Wie von Chris in seiner Selbstantwort erklärt , ruft er an
und dann
funktioniert wirklich wie Charme ... auf echten Geräten!
Denken Sie nicht, dass es beim Testen auf dem Emulator kaputt ist. Die Tastenkombination Strg + F11 ändert IMMER die Bildschirmausrichtung, ohne dass sich die Sensoren emulieren.
EDIT: Dies war nicht die bestmögliche Antwort. Wie in den Kommentaren erläutert, gibt es Probleme mit dieser Methode. Die wirkliche Antwort ist hier .
quelle
ActivityInfo.SCREEN_ORIENTATION_SENSOR
respektiert nicht die native Orientierungssperre von Android. Zurücksetzen der Ausrichtung aufActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
tut.Keine der anderen Antworten hat den Trick perfekt für mich gemacht, aber hier ist, was ich gefunden habe.
Ausrichtung auf Strom sperren ...
Wenn das Ändern der Ausrichtung erneut zulässig sein soll, setzen Sie den Standardwert auf ...
quelle
Configuration.ORIENTATION_PORTRAIT
in beiden Querformatmodi (dh "normal" und umgekehrt) zurückgegeben wird. Wenn sich das Telefon also im umgekehrten Querformat befindet und Sie es darauf einstellen, wird es auf denActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
Kopf gestellt. In API 9 führt ActivityInfo eineSCREEN_ORIENTATION_REVERSE_LANDSCAPE
Konstante ein, aber ich sehe keine Möglichkeit, eine solche Ausrichtung durch dieConfiguration
Klasse zu erkennen .Hier ist eine vollständigere und aktuellere Lösung, die für API 8+, für umgekehrtes Hoch- und Querformat sowie für eine Galaxy-Registerkarte funktioniert, auf der die "natürliche" Ausrichtung Querformat ist (Aufruf
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
zum Entsperren der Ausrichtung):quelle
static
erstellen undActivity activity
als Parameter hinzufügen .Um auch die Modi für die umgekehrte Ausrichtung zu verwalten, habe ich diesen Code verwendet, um die Aktivitätsorientierung zu korrigieren:
Und um noch einmal die Orientierung zu ermöglichen:
quelle
Verwenden
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
zum Arretieren aktuelle Orientierung ob Quer- oder Hochformat sein.Verwendung
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
zur Entriegelung Orientierung.quelle
Ich habe die Antwort gefunden. Zu diesem Zweck können Sie in einer Aktivität
setRequestedOrientation(int)
einen der hier angegebenen Werte aufrufen : http://developer.android.com/reference/android/R.attr.html#screenOrientationBevor ich meinen Thread startete, rief ich an
setRequestedOrientation(OFF)
(OFF = Nosensor) und als der Thread fertig war, rief ich ansetRequestedOrientation(ON)
(ON = Sensor). Klappt wunderbar.quelle
Vielen Dank an alle. Ich habe die Lösung von Pilot_51 geändert, um sicherzustellen, dass ich den vorherigen Status wiederhergestellt habe. Ich habe auch eine Änderung vorgenommen, um Bildschirme ohne Querformat und ohne Hochformat zu unterstützen (habe sie jedoch nicht auf einem solchen Bildschirm getestet).
Dann, um es wiederherzustellen
quelle
switch
.quelle
Hier ist eine Lösung, die jedes Mal funktioniert und die aktuelle Ausrichtung beibehält (
Activity.Info.SCREEN_ORIENTATION_PORTRAIT
z. B. mit Sätzen auf 0 °, aber der Benutzer kann eine aktuelle Ausrichtung von 180 ° haben).quelle
Verwenden
ActivityInfo.SCREEN_ORIENTATION_USER
Sie diese Option, wenn Sie den Bildschirm nur drehen möchten, wenn er auf dem Gerät aktiviert ist.quelle
Das funktioniert Präfekt für mich. Es löst das Problem mit der unterschiedlichen "natürlichen Ausrichtung" des Tablets / Telefons;)
quelle
Ich habe eine Lösung gefunden, die von der Drehung des Displays abhängt und dann die Ausrichtung des Geräts festlegt. Wenn wir die Ausrichtung kennen, können wir die Ausrichtung sperren und später bei Bedarf freigeben. Diese Lösung kann auch feststellen, ob sich das Gerät im umgekehrten Querformatmodus befindet.
Wenn wir später die Orientierung freigeben müssen, können wir diese Methode aufrufen:
quelle
Ich denke, dieser Code ist leichter zu lesen.
quelle
Ich habe festgestellt, dass eine Kombination vorhandener Rotations- / Orientierungswerte erforderlich ist, um die vier Möglichkeiten abzudecken. Es gibt die Hoch- / Querformatwerte und die natürliche Ausrichtung des Geräts. Angenommen, die natürliche Ausrichtung der Geräte hat einen Rotationswert von 0 Grad, wenn sich der Bildschirm im "natürlichen" Hoch- oder Querformat befindet. In ähnlicher Weise gibt es einen Rotationswert von 90 Grad im Quer- oder Hochformat (beachten Sie, dass er der Ausrichtung bei 0 Grad entgegengesetzt ist). Die Rotationswerte, die nicht 0 oder 90 Grad sind, implizieren also eine "umgekehrte" Ausrichtung. Ok, hier ist ein Code:
quelle
Die meisten Antworten hier haben mir nicht gefallen, da sie beim Entsperren im Gegensatz zum vorherigen Status auf UNSPECIFIED gesetzt wurden. ProjectJourneyman hat das berücksichtigt, was großartig war, aber ich habe den Sperrcode von Roy vorgezogen. Meine Empfehlung wäre also eine Mischung aus beidem:
quelle
Sie können verwenden
quelle
Verwenden Sie diese Codezeile
in Ihrer Aktivität oncreate Methode
quelle