Italian app per registrare una telefonata

Star-Dust

Expert
Licensed User
Longtime User
infatti puoi registrarla, purché non la fai ascoltare a nessuno. Ma la puoi risentire tu da solo in una stanzetta...

Ecco perché pensavo alle HotLine
 

Star-Dust

Expert
Licensed User
Longtime User

LucaMs

Expert
Licensed User
Longtime User
Io ho sentito dire che con AMANTE 1.0 spesso è necessario lanciare insieme anche DIAMANTI 2.0, altrimenti non sia avvia.

La colpa di tutto questo, comunque, è il CORE UOMO 0.0 del Sistema Operativo: fin dalla sua prima stesura comprendeva un bug, da allora mai risolto, che in seguito venne chiamato PENARE E PAGARE PER GNOCCA.tiè.
Se avesero messo subito una patch che pochi conoscono, PARITA' IN TUTTO E PER TUTTO.aha, tra l'altro scaricabile gratuitamente dal sito: www.paghino-le-donne.hom, tutto quello non sarebbe successo.
 

LucaMs

Expert
Licensed User
Longtime User
infatti puoi registrarla, purché non la fai ascoltare a nessuno. Ma la puoi risentire tu da solo in una stanzetta...
Un'app che avevo in mente qualche anno fà (oramai, quando parlo di mie eventuali app, come unità temporale uso l'anno, maremma ritardata!) era come minimo pazzesca (ma proprio per questo, inedita): creare, su richiesta (effettuata tramite app) file audio per signore/ine, con breve frase sexy-romantica, personalizzata col nome utente.

Questo perché mi hanno sempre detto che ho una bella voce. La cosa mi faceva piacere, ovviamente, fino a quando... una settantenne amica di mio padre (oh, non ci si arrende mai :p), dopo il solito complimento, mi disse: "Perché non ha provato a lavorare in radio?".

Quello avrei dovuto fare, altro che il gigolò o il programmatore!
 

Star-Dust

Expert
Licensed User
Longtime User
Ho usato un servizio molto semplice per registrare le chiamate..questo é il codice

B4X:
#Region  Service Attributes
    #StartAtBoot: False
    #StartCommandReturnValue: android.app.Service.START_STICKY
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim PE As PhoneEvents
    Dim PhoneId As PhoneId
    Dim Path As String = File.DirRootExternal
    Dim Ar As AudioRecorder
   
    Dim Nt As Notification
End Sub

Sub Service_Create
    PE.InitializeWithPhoneState("PE", PhoneId)
   
    If File.Exists(Path,"RegCall")=False Then
        File.MakeDir(Path,"RegCall")
        Path=File.Combine(Path,"RegCall")
    End If
    Ar.Initialize()
    Ar.AudioSource = Ar.AS_VOICE_CALL
    'Ar.AudioSource = Ar.AS_MIC
    Ar.OutputFormat = Ar.OF_THREE_GPP
    Ar.AudioEncoder = Ar.AE_AMR_NB
   
    Nt.Initialize
    Nt.AutoCancel=False
    Nt.Icon="icon"
    Nt.SetInfo("CallRecorder","Wait",Main)
    Nt.Sound=False
    Nt.Vibrate=False
    Service.StartForeground(1,Nt)
End Sub

Sub Service_Start (StartingIntent As Intent)

End Sub

Sub Service_Destroy

End Sub

Sub PE_PhoneStateChanged (State As String, IncomingNumber As String, Intent1 As Intent)

    If State="RINGING" Then
        'Squillo
        If Ar.isRecording Then Ar.stop
        Dim FileName As String = DateTime.Now & ".wav"
        Log(Path & FileName)
        Ar.setOutputFile(Path,FileName)
        Ar.prepare()
    Else If State="OFFHOOK" Then
        'Sganciato
        Ar.start
    else If State="IDLE" Then
        'libero
       
    End If
End Sub

mi genera questo errore appena avvia la registrazione (Ar.start):

B4X:
LogCat connected to: F7AZFG013983
--------- beginning of system--------- beginning of main
** Service (starter) Create **
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
** Service (callservice) Create **
Audio Source: 4
** Service (callservice) Start **
** Activity (main) Pause, UserClosed = false **
callservice_pe_phonestatechanged (B4A line: 58)
Ar.start
java.lang.IllegalStateException
    at android.media.MediaRecorder._start(Native Method)
    at android.media.MediaRecorder.start(MediaRecorder.java:857)
    at com.rootsoft.audiorecorder.AudioRecorder.start(AudioRecorder.java:227)
    at b4a.example.callservice._pe_phonestatechanged(callservice.java:213)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
    at anywheresoftware.b4a.BA.raiseEvent(BA.java:153)
    at anywheresoftware.b4a.phone.PhoneEvents$ActionHandler$1.run(PhoneEvents.java:321)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5480)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
java.lang.RuntimeException: java.lang.IllegalStateException
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:206)
    at anywheresoftware.b4a.BA.raiseEvent(BA.java:153)
    at anywheresoftware.b4a.phone.PhoneEvents$ActionHandler$1.run(PhoneEvents.java:321)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5480)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.IllegalStateException
    at android.media.MediaRecorder._start(Native Method)
    at android.media.MediaRecorder.start(MediaRecorder.java:857)
    at com.rootsoft.audiorecorder.AudioRecorder.start(AudioRecorder.java:227)
    at b4a.example.callservice._pe_phonestatechanged(callservice.java:213)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
    ... 9 more
 

Star-Dust

Expert
Licensed User
Longtime User
Cosi sembra funzionare

B4X:
#Region  Service Attributes
    #StartAtBoot: False
    #StartCommandReturnValue: android.app.Service.START_STICKY
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim PE As PhoneEvents
    Dim PhoneId As PhoneId
    Dim Path As String = File.DirRootExternal & "/RegCall"
    Dim Ar As AudioRecorder
   
    Dim Nt As Notification
End Sub

Sub Service_Create
    PE.InitializeWithPhoneState("PE", PhoneId)
   
    If File.Exists(File.DirRootExternal,"RegCall")=False Then
        File.MakeDir(File.DirRootExternal,"RegCall")
    End If
   
    Ar.Initialize()
    Ar.AudioSource = Ar.AS_VOICE_CALL
    'Ar.AudioSource = Ar.AS_MIC
    Ar.OutputFormat = Ar.OF_AMR_NB
    Ar.AudioEncoder = Ar.AE_AMR_NB
   
    Nt.Initialize
    Nt.AutoCancel=False
    Nt.Icon="icon"
    Nt.SetInfo("CallRecorder","Wait",Main)
    Nt.Sound=False
    Nt.Vibrate=False
    Service.StartForeground(1,Nt)
End Sub

Sub Service_Start (StartingIntent As Intent)

End Sub

Sub Service_Destroy

End Sub

Sub PE_PhoneStateChanged (State As String, IncomingNumber As String, Intent1 As Intent)

    If State="RINGING" Then
        'Squillo
        If Ar.isRecording Then Ar.stop
       
    Else If State="OFFHOOK" Then
        'Sganciato
        Dim FileName As String = DateTime.Now & ".amr"
        Log(Path & FileName)
        Ar.setOutputFile(Path,FileName)
        Ar.prepare()
        Ar.start
    else If State="IDLE" Then
        'libero
       
    End If
End Sub
 

valentino s

Active Member
Licensed User
Longtime User
Giusto per aiutare chi leggera' il thread:

Risorse su: https://www.b4x.com/android/help/audiorecorder.html#audiorecorder_as_mic

La sorgente e' Ar.AudioSource = Ar.AS_VOICE_CALL. Dovrebbe essere richiesto il permesso all'installazione, giusto ?

La differenza tra i due script e':

- nella diversa cartella utilizzata dove registrare i files,
- un posticipare la preparazione del file al momento della risposta (e non dello squillo) e
- l'uso del formato audio AMR_NB.

Spero di aver capito giusto.
 

Star-Dust

Expert
Licensed User
Longtime User
Ho solo fatto delle prove finché non ha funzionato... Cosa ho fatto non lo so.. Ma il secondo codice funziona :p:p

Io sono della scuola di pensiero: Dove non arrivi con la conoscenza e l'intelligenza... Un bel colpo di fortuna ti ci porta senza fatica :D:D
 
Last edited:

valentino s

Active Member
Licensed User
Longtime User
Un bel colpo di fortuna ti ci porta senza fatica :D:D

Si', concordo :)


Non ho visto il comando per terminare la registrazione. Non conosco ancora usato i comandi, ma mi aspetterei di trovare un
"Ar.stop" in qualcosa tipo "ElseIf State="ONHOOK" Then"
Invece sembra che non ce ne sia bisogno, giusto ?
 

Star-Dust

Expert
Licensed User
Longtime User
Si', concordo :)


Non ho visto il comando per terminare la registrazione. Non conosco ancora usato i comandi, ma mi aspetterei di trovare un
"Ar.stop" in qualcosa tipo "ElseIf State="ONHOOK" Then"
Invece sembra che non ce ne sia bisogno, giusto ?
In realtà serve, io non ci avevo pensato. Comunque ah funzionato senza.

Ma bisogna aggiungerlo a fine conversazione.
 
Top