Aktivitas utama saya memiliki beberapa kode yang membuat beberapa perubahan database yang tidak boleh terganggu. Saya melakukan pekerjaan berat di utas lain, dan menggunakan dialog kemajuan yang saya tetapkan sebagai tidak dapat dibatalkan. Namun, saya perhatikan bahwa jika saya memutar ponsel saya, ponsel akan memulai ulang aktivitas yang BENAR-BENAR buruk untuk proses yang sedang berjalan, dan saya mendapatkan Tutup Paksa.
Yang ingin saya lakukan adalah menonaktifkan perubahan orientasi layar secara terprogram hingga proses saya selesai, di mana perubahan orientasi waktu diaktifkan.
android
screen-orientation
android-orientation
Christopher Perry
sumber
sumber
Jawaban:
Seperti yang dijelaskan oleh Chris dalam menjawab sendiri , menelepon
lalu
benar-benar berfungsi seperti pesona ... di perangkat nyata!
Jangan mengira itu rusak saat menguji pada emulator, pintasan ctrl + F11 SELALU mengubah orientasi layar, tanpa meniru gerakan sensor.
EDIT: ini bukan jawaban terbaik. Seperti yang dijelaskan di komentar, ada masalah dengan metode ini. Jawaban sebenarnya ada di sini .
sumber
ActivityInfo.SCREEN_ORIENTATION_SENSOR
tidak menghormati kunci orientasi asli Android. Mengatur ulang orientasi keActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
lakukan.Tidak ada jawaban lain yang berhasil dengan sempurna untuk saya, tetapi inilah yang saya temukan.
Kunci orientasi ke arus ...
Saat mengubah orientasi harus diizinkan lagi, setel kembali ke default ...
sumber
Configuration.ORIENTATION_PORTRAIT
akan dikembalikan dalam kedua mode lanskap (yaitu 'normal', dan dibalik). Jadi jika ponsel dalam orientasi lanskap terbalik dan Anda mengaturnya,ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
ponsel akan terbalik. Dalam API 9, ActivityInfo memperkenalkanSCREEN_ORIENTATION_REVERSE_LANDSCAPE
konstanta, tetapi saya tidak melihat cara untuk mendeteksi orientasi semacam itu melaluiConfiguration
kelas.Berikut adalah solusi yang lebih lengkap dan terkini yang berfungsi untuk API 8+, berfungsi untuk potret terbalik dan lanskap, dan berfungsi pada tab Galaxy di mana orientasi "alami" adalah lanskap (panggil
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
untuk membuka kunci orientasi):sumber
static
dan menambahkannyaActivity activity
sebagai parameter.Untuk mengelola juga mode orientasi terbalik, saya telah menggunakan kode itu untuk memperbaiki orientasi aktivitas:
Dan untuk memungkinkan lagi orientasi:
sumber
Gunakan
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
untuk mengunci orientasi saat ini apakah itu lanskap atau potret.Gunakan
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
untuk membuka kunci orientasi.sumber
Saya menemukan jawabannya. Untuk melakukan ini, dalam Aktivitas Anda dapat memanggil
setRequestedOrientation(int)
dengan salah satu nilai yang ditentukan di sini: http://developer.android.com/reference/android/R.attr.html#screenOrientationSebelum saya memulai utas saya, saya memanggil
setRequestedOrientation(OFF)
(OFF = nosensor) dan ketika utas selesai saya memanggilsetRequestedOrientation(ON)
(ON = sensor). Bekerja seperti pesona.sumber
Terima kasih semuanya. Saya memodifikasi solusi Pilot_51, untuk memastikan saya mengembalikan ke keadaan sebelumnya. Saya juga melakukan perubahan untuk mendukung layar non-lanskap dan non-potret (tetapi belum mengujinya pada layar seperti itu).
Kemudian untuk memulihkannya
sumber
switch
.sumber
Berikut adalah solusi yang bekerja setiap saat dan mempertahankan orientasi saat ini (menggunakan
Activity.Info.SCREEN_ORIENTATION_PORTRAIT
set ke 0 ° misalnya, tetapi pengguna dapat memiliki orientasi 180 ° seperti yang sekarang).sumber
gunakan
ActivityInfo.SCREEN_ORIENTATION_USER
jika Anda ingin memutar layar hanya jika diaktifkan pada perangkat.sumber
Ini bekerja dengan sempurna bagi saya. Ini memecahkan masalah dengan "orientasi alami" tablet / ponsel yang berbeda;)
sumber
Saya telah menemukan solusi yang bergantung pada rotasi layar dan kemudian memutuskan orientasi perangkat. Dari mengetahui orientasi kita dapat mengunci orientasi dan melepaskannya nanti saat diperlukan. Solusi ini juga dapat menentukan apakah perangkat dalam mode lanskap terbalik .
Kemudian jika kita perlu melepaskan orientasi kita dapat memanggil metode ini:
sumber
Saya rasa kode ini lebih mudah dibaca.
sumber
Saya telah menemukan kombinasi nilai rotasi / orientasi yang ada diperlukan untuk mencakup empat kemungkinan; ada nilai potret / lanskap dan orientasi alami perangkat. Misalkan, orientasi alami perangkat akan memiliki nilai rotasi 0 derajat saat layar dalam orientasi potret atau lanskap "alami". Demikian pula, akan ada nilai rotasi 90 derajat saat dalam lanskap atau potret (perhatikan kebalikan dari orientasi @ 0 derajat). Jadi nilai rotasi yang bukan 0 atau 90 derajat akan menunjukkan orientasi "Terbalik". Oke, berikut beberapa kodenya:
sumber
Saya tidak suka sebagian besar jawaban di sini, karena dalam pembukaan kunci mereka mengaturnya ke UNSPECIFIED sebagai lawan dari keadaan sebelumnya. ProjectJourneyman memang memperhitungkannya, dan itu bagus, tapi saya lebih suka kode penguncian dari Roy. Jadi, rekomendasi saya adalah campuran keduanya:
sumber
Kamu bisa memakai
sumber
gunakan baris kode itu
dalam metode pembuatan aktivitas Anda
sumber