Autore Topic: Disabilitare la rotazione durante le chiamate al server  (Letto 667 volte)

Offline nnever2000

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    emulatore
  • Sistema operativo:
    windows xp sp3
Disabilitare la rotazione durante le chiamate al server
« il: 15 Febbraio 2012, 17:05:13 CET »
0
Ciao ragazzi,
ho questa necessità: durante le chiamate al server visualizzo la dialog con la progress bar mentre aspetto l'esito della chiamata. Se in questo momento l'utente ruota lo schermo mi perdo la dialog (anche se aveva il parametro per disabilitare il tasto back) e il successivo evento OnClickListener.

Io vorrei fare così: prima di avviare una richiesta sul serve blocco la rotazione. Alla fine la riabilito.

In rete ho trovato guide per disabilite permanentemente la rotazione in un'app (attraverso l'application manifest) ma non per una disabilitazione "provvisoria".
« Ultima modifica: 15 Febbraio 2012, 17:27:28 CET da nnever2000 »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Disabilitare la rotazione durante le chiamate al server
« Risposta #1 il: 15 Febbraio 2012, 17:16:17 CET »
+1
Ciao ragazzi,
ho questa necessità: durante le chiamate al server visualizzo la dialog con la progress bar mentre aspetto l'esito della chiamata. Se in questo momento l'utente ruota lo schermo mi perdo la dialog (anche se aveva il parametro per disabilitare il tasto back) e il successivo evento OnClickListener.

In rete ho trovato guide per disabilite permanentemente la rotazione in un'app (attraverso l'application manifest) ma non per una disabilitazione "provvisoria".

Nella famosa applicazione Shelves (che trovi open source su google code) se viene ruotato lo schermo durante una operazione di rete con progress bar, l'operazione viene abortita, la progress bar distrutta, quindi riavviato il tutto automaticamente dopo la rotazione.

Rispetto alla soluzione che avevi prospettato, questa sembra una soluzione più grezza, ma visivamente l'utente considera molto più "di qualità" l'applicazione che ruota immediatamente, anche se ci mette un po' di più.

In ogni caso, con modifiche minime al metodo Shelves, puoi ottenere anche il comportamento che descrivi.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline agenio

  • Utente junior
  • **
  • Post: 77
  • Respect: +11
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Sistema operativo:
    Windows 8.1
Re:Disabilitare la rotazione durante le chiamate al server
« Risposta #2 il: 15 Febbraio 2012, 17:22:29 CET »
+3
Prova a leggere le soluzioni proposte qui: http://stackoverflow.com/questions/3611457/android-temporarily-disable-orientation-changes-in-an-activity

Tra le risposte arrivano a questa conclusione:
Codice (Java): [Seleziona]
prevOrientation = getRequestedOrientation(); //per salvarti la posizione corrente
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
}

e quindi per ripristinare la posizione corrente:
Codice (Java): [Seleziona]
setRequestedOrientation(prevOrientation);
ovviamente al posto di else if io ci metterei un bel switch case (come consigliano anche sul sito)

Offline nnever2000

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    emulatore
  • Sistema operativo:
    windows xp sp3
Re:Disabilitare la rotazione durante le chiamate al server
« Risposta #3 il: 15 Febbraio 2012, 17:31:24 CET »
0
Dal momento che non posso fare un abort della transazione la seconda soluzione è esattamente quello che mi serviva.

Grazie

Offline davraf

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    GT-I9001
  • Sistema operativo:
    Android 2.3.6, Kernel 2.6.35.7
Re:Disabilitare la rotazione durante le chiamate al server
« Risposta #4 il: 20 Maggio 2013, 11:55:01 CEST »
0
Prova a leggere le soluzioni proposte qui: http://stackoverflow.com/questions/3611457/android-temporarily-disable-orientation-changes-in-an-activity

Tra le risposte arrivano a questa conclusione:
Codice (Java): [Seleziona]
prevOrientation = getRequestedOrientation(); //per salvarti la posizione corrente
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
}

e quindi per ripristinare la posizione corrente:
Codice (Java): [Seleziona]
setRequestedOrientation(prevOrientation);
ovviamente al posto di else if io ci metterei un bel switch case (come consigliano anche sul sito)

scusatemi, vorrei usare questa soluzione ma non ho capito dove va inserita. basta che la uso prima di chiamare il dowork della mia AsyncTask?
e poi a fine lavoro lancio la setRequestedOrientation... non mi è molto chiaro come funzioni, in parole povere con l'if forzo l'orientamento dell'activity in barba al sensore? e poi alla fine lo riposiziono. ma così non capisco come faccio a capire se nel frattempo l'orientamento è cambiato.
accosto e metto le 4 frecce in attesa di aiuto...