Italian Intercettare i tasti volume

Dominex

Active Member
Licensed User
Longtime User
Ciao a tutti sono nuovo del forum.

Facendo le mie prime prove per imparare la struttura sono incappato in un problema con la mia prima app, in pratica se voglio alzare o abbassare il volume durante l'esecuzione dell'app, questa viene chiusa?!?

Come posso intercettare la pressione dei tasti volume "+" e "-" così da evitare di far chiudere l'app, e al tempo stesso agire sulla regolazione del volume vero e proprio?

-----------

Finché ci sono, chiedo se esiste un comando tipo "pausa", nel senso che se scrivo "Pausa(1000)", ferma l'applicazione per 1 secondo. Altrimenti la creerò io.
 
Last edited:

AlpVir

Well-Known Member
Licensed User
Longtime User
B4X:
Sub Attendi(Secondi As Int)
   Dim Ti As Long
   Ti = DateTime.Now + (Secondi * 1000)
   Do While DateTime.Now < Ti
      DoEvents
   Loop
End Sub
 

Dominex

Active Member
Licensed User
Longtime User
B4X:
Sub Attendi(Secondi As Int)
   Dim Ti As Long
   Ti = DateTime.Now + (Secondi * 1000)
   Do While DateTime.Now < Ti
      DoEvents
   Loop
End Sub

Semplice e funzionale. Grazie.

Non è che per caso sai come impostare in BOLD un font via codice?
 

Dominex

Active Member
Licensed User
Longtime User
Ho scoperto come intercettare i tasti volume.

B4X:
Sub Activity_KeyPress (KeyCode As Int) As Boolean
   If KeyCode = KeyCodes.KEYCODE_VOLUME_UP OR KeyCode = KeyCodes.KEYCODE_VOLUME_DOWN Then Return True
End Sub

Adesso devo solo come gestire il cambio del volume.
 

Dominex

Active Member
Licensed User
Longtime User
Ecco il codice:

B4X:
Sub Process_Globals
   Dim phone1 As Phone
End Sub

Sub Activity_KeyPress (KeyCode As Int) As Boolean
   Dim temp As Int
   Select KeyCode
      Case KeyCodes.KEYCODE_VOLUME_DOWN
         temp = phone1.GetVolume(phone1.VOLUME_MUSIC)
           If temp > 0 Then temp = temp - 1 Else temp = 0
         phone1.SetVolume(phone1.VOLUME_MUSIC, temp, True)
         Return True
      Case KeyCodes.KEYCODE_VOLUME_UP
         temp = phone1.GetVolume(phone1.VOLUME_MUSIC)
           If temp < phone1.GetMaxVolume(phone1.VOLUME_MUSIC) Then
            temp = temp + 1
         Else
            temp = phone1.GetMaxVolume(phone1.VOLUME_MUSIC)
           End If  
           phone1.SetVolume(phone1.VOLUME_MUSIC, temp, True)
         Return True
    End Select
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
Ma io come posso far partire una canzone che si deve sentire più bassa rispetto alle altre??


Dal punto di vista di B4A non so se sia possibile, ma ti consiglio un altro semplice metodo:

usi il programma Format Factory (gratuito) col quale puoi convertire file video e audio (anche da mp3 a mp3, volendo!)
che ti consente di salvare con volume più basso (in percentuale).
 

fabio2222

Member
Ciao scusa se ancora vi rompo le scatole siccome e da poche settimane che utilizzo basic4android ho provato a creare una piccola applicazione (cretina) che si deve indovina il numero nascosto. Purtroppo mi fa un errore che ho capito prk me lo fa però non lo so risolvere qui sotto vi ho messo la foto dell errore. me lo potete spiegare??? Grazie in anticipo
 

Attachments

  • 2013-11-22 14.56.45.jpg
    2013-11-22 14.56.45.jpg
    292.7 KB · Views: 231

LucaMs

Expert
Licensed User
Longtime User
Ciao scusa se ancora vi rompo le scatole siccome e da poche settimane che utilizzo basic4android ho provato a creare una piccola applicazione (cretina) che si deve indovina il numero nascosto. Purtroppo mi fa un errore che ho capito prk me lo fa però non lo so risolvere qui sotto vi ho messo la foto dell errore. me lo potete spiegare??? Grazie in anticipo

Non rompi, il forum esiste per questo :)

Nella sub button3_Click assegni un valore stringa vuoto ("") ad una variabile di tipo Double.

Ciao
 

LucaMs

Expert
Licensed User
Longtime User
Quindi dovrei mettere cosi:

dim "" as string ???

no. Intanto con Dim dichiari una variabile, un contenitore di dati a cui dai un nome, per esempio:
Dim Indirizzo As String
Ho scelto di creare una variabile chiamata Indirizzo in cui metterò del testo, una volta sarà "pza Garibaldi", un'altra "via Verdi"... ecco perché variabile.

Ma tu devi aver messo qualcosa tipo:
Dim MiaVariabile As Double (che dovrà contenere numeri decimali)
e poi
MiaVariabile = "" (che è una stringa, un testo)

oppure
MiaVariabile = Indirizzo - ma MiaVariabile deve contenere numeri e Indirizzo invece testo, quindi sono incompatibili (a meno che... ma è lunga)

Comunque, usando le icone sopra, inserisci qui la parte di codice che hai messo nella sub Button3_Click
 

fabio2222

Member
no. Intanto con Dim dichiari una variabile, un contenitore di dati a cui dai un nome, per esempio:
Dim Indirizzo As String
Ho scelto di creare una variabile chiamata Indirizzo in cui metterò del testo, una volta sarà "pza Garibaldi", un'altra "via Verdi"... ecco perché variabile.

Ma tu devi aver messo qualcosa tipo:
Dim MiaVariabile As Double (che dovrà contenere numeri decimali)
e poi
MiaVariabile = "" (che è una stringa, un testo)

oppure
MiaVariabile = Indirizzo - ma MiaVariabile deve contenere numeri e Indirizzo invece testo, quindi sono incompatibili (a meno che... ma è lunga)

Comunque, usando le icone sopra, inserisci qui la parte di codice che hai messo nella sub Button3_Click




Sub Button3_Click

suono.initialize
suono.Load(File.DirAssets, "button.mp3")
suono.play
While
If EditText1.Text=" " Then
Msgbox("Devi inserire un numero","Errore")
End If
If x=0 Then
Msgbox("Devi schiacciare prima il pulsante genera numero","Errore")
EditText2.Text= " "
End If
If EditText1.text>x Then
EditText2.Text = "Il numero che hai inserito è più grande"
sbaglio=sbaglio+1
End If

If EditText1.text<x Then
EditText2.Text= "Il numero che hai inserito è più piccolo"
sbaglio=sbaglio+1
End If
If EditText1.Text>10 Then
Msgbox("Devi inserire un numero che va da 1 a 10","Errore")
End If

If EditText1.Text<1 Then
Msgbox("Devi inserire un numero che va da 1 a 10","Errore")
End If

If x=EditText1.text Then
EditText2.Text= "Hai indovinato il numero"
EditText3.Text= sbaglio
suono.initialize
suono.Load(File.DirAssets, "applausi.mp3")
suono.play
End If

If EditText1.Text=0 Then
EditText2.Text= " "
EditText3.Text= " "
End If

End Sub
 

LucaMs

Expert
Licensed User
Longtime User
Sub Button3_Click

suono.initialize
suono.Load(File.DirAssets, "button.mp3")
suono.play
While
If EditText1.Text=" " Then
Msgbox("Devi inserire un numero","Errore")
End If
If x=0 Then
Msgbox("Devi schiacciare prima il pulsante genera numero","Errore")
EditText2.Text= " "
End If
If EditText1.text>x Then
EditText2.Text = "Il numero che hai inserito è più grande"
sbaglio=sbaglio+1
End If

If EditText1.text<x Then
EditText2.Text= "Il numero che hai inserito è più piccolo"
sbaglio=sbaglio+1
End If
If EditText1.Text>10 Then
Msgbox("Devi inserire un numero che va da 1 a 10","Errore")
End If

If EditText1.Text<1 Then
Msgbox("Devi inserire un numero che va da 1 a 10","Errore")
End If

If x=EditText1.text Then
EditText2.Text= "Hai indovinato il numero"
EditText3.Text= sbaglio
suono.initialize
suono.Load(File.DirAssets, "applausi.mp3")
suono.play
End If

If EditText1.Text=0 Then
EditText2.Text= " "
EditText3.Text= " "
End If

End Sub


Confronti il contenuto di una EditText che è una stringa, un testo, con una variabile x che non vedo dichiarata (Dim). Se scrivono "ciao" salta tutto... o anche se lasciano la EditText vuota.

Ci sono tante cose da fare.

Intanto, fai sempre il confronto tra variabili, non con le view (EditText in questi casi). Se tu mettessi, che so...
Dim NumeroInserito as Int
Dim ValoreMinimo as Int

ValoreMinimo = 0
NumInserito = "0" & EditText1.text ' <--- questo unisce "0" a quanto ha digitato l'utente.

If NumeroInserito < ValoreMinimo Then
non ti darebbe errore.

Ancora meglio, puoi fare in modo che vengano immessi solo numeri, mettendo:
EditText1.InputType = EditText1.INPUT_TYPE_NUMBERS
(oppure InputType = EditText1.INPUT_TYPE_DECIMAL_NUMBERS se accetti anche decimali)

Poi, potresti eseguire il controllo subito dopo che l'utente ha lasciato la casella di testo:

Sub EditText1_FocusChanged (HasFocus As Boolean)
if not(HasFocus) then ' se il cursore non è più qui
' e qui fai il confronto
end if
End Sub

Dovresti usare il blocco:
Select Case NumeroInserito
Case 0
Msgbox("Zero non vale, demente", "Errore")
case 1
' qui altro
case 50
case else
End Select

che rende tutto più ordinato.

la While è incompleta.
While A > B
Loop

Insomma, che ne dici di leggere un manuale facile facile?
http://www.b4x.com/android/files/guide.zip
Purtoppo è in inglese... aiutati con Google Translate.

Qui http://www.b4x.com/android/documentation.html
trovi tanta documentazione.

Ciao
 

fabio2222

Member
allora le variabili sono stati dichiarate in un altro spazio. Dopo ho fatto in modo che tu inserisci solo numeri e quindi ho messo il tastierino numerico.
A me interessa risolvere intanto quel piccolo errore che mi fa perchè per il resto funziona
 
Top