Italian PhoneCalls

nonno

Active Member
Licensed User
Longtime User
Ciao Ragazzi
ho provato il codice di MarcoRoma, ma non funziona sia in entrata che in uscita, a questo punto ho sicuramente sbagliato io
ma dove ho sbagliato?:rolleyes:
allego il file se non chiedo troppo, se qualcuno per favore da un occhiata:(
Grazie Mille
 

Attachments

  • Prova Telefonata.zip
    445.2 KB · Views: 346

LucaMs

Expert
Licensed User
Longtime User
Prima cosa che salta all'occhio è che hai scritto delle routine (Service_Create, Service_Start e Service_Destroy) che devono fare parte di un modulo di servizio, non di una Activity. In questo caso, suggerito da Marco, stanno già nel modulo Starter, quindi ci dovrai mettere il contenuto ed eliminarle dalla Activity Main.
 

MarcoRome

Expert
Licensed User
Longtime User
Penso di aver capito.
Grazie Luca

1. Copia questo codice cosi com'è nel file Starter....

B4X:
#Region  Service Attributes
    #StartAtBoot: False
    #ExcludeFromLibrary: True
#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 str As String
End Sub

Sub Service_Create
    'This is the program entry point.
    'This is a good place to load resources that are not specific to a single activity.

End Sub

Sub Service_Start (StartingIntent As Intent)
   
'    Log(StartingIntent)
'    Log(StartingIntent.ExtrasToString)
   
    If StartingIntent.Action = "android.intent.action.PHONE_STATE" Then
       
        Select StartingIntent.GetExtra("state")
            str = StartingIntent.ExtrasToString
            Log("FINISCE LA TELEFONATA: " & str)
            'onhook - call ended or phone idle
            Case "ILDE"
                Log("ILDE")
                'outgoing call processing
            Case "OFFHOOK"
                Log("OFF")
                'incoming call processing
            Case "RINGING"
                Log("CallerID="&StartingIntent.GetExtra("incoming_number"))
      
        End Select
    End If

    If StartingIntent.Action = "android.intent.action.NEW_OUTGOING_CALL" Then
            str = StartingIntent.ExtrasToString
            Log("PARTE LA TELEFONATA: " & str)
        If StartingIntent.HasExtra("android.intent.extra.PHONE_NUMBER") Then
            Dim myphone As String
            myphone = StartingIntent.GetExtra("android.intent.extra.PHONE_NUMBER")
            Log(myphone)
        End If
    End If

End Sub

Sub Service_TaskRemoved
    'This event will be raised when the user removes the app from the recent apps list.
End Sub

'Return true to allow the OS default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
    Return True
End Sub

Sub Service_Destroy

End Sub

2. Copia questo codice nel file Manifst ( aggiungilo a quello esistente di default )

B4X:
AddPermission(android.permission.READ_PHONE_STATE)
AddReceiverText(Starter,
<intent-filter>
    <action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>)


' FOR OUTGOING CALLS
AddPermission(android.permission.PROCESS_OUTGOING_CALLS)
AddReceiverText(Starter, <intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>)

3. Lancia l'applicativo ( Debug cosi puoi visualizzare i risultati nella finestra log )
3. Effettua una telefonata dal telfono dove hai installato l'app ( senza chiudere la stessa )
4. Guarda nella finestra LOGS
 

nonno

Active Member
Licensed User
Longtime User
Grazie Marco adesso provo stavo sbagliando quasi tutto, infatti lanciando il tuo esempio, quando partiva la telefonata mi appariva un lungo messaggio di java con degli errori.
Grazie mille
 

nonno

Active Member
Licensed User
Longtime User
Grazie Marco Funzionaaaa:)
ti chiedo una cortesia, non riesco ad intercettare quando termina la Telefonata.
E dovrei poter chiudere la telefonata dopo 20 secondi che il telefono suona e l'utente non risponde.

Grazie mille per i tuoi consigli
 

Attachments

  • Phone.zip
    442.5 KB · Views: 332

MarcoRome

Expert
Licensed User
Longtime User
Grazie Marco Funzionaaaa:)
ti chiedo una cortesia, non riesco ad intercettare quando termina la Telefonata.
E dovrei poter chiudere la telefonata dopo 20 secondi che il telefono suona e l'utente non risponde.

Grazie mille per i tuoi consigli
Guarda bene nella finestra log....e questa parte di codice:

B4X:
.....
Log("FINISCE LA TELEFONATA: " & str)
            'onhook - call ended or phone idle
.......
 

nonno

Active Member
Licensed User
Longtime User
Si hai ragione ho sbagliato a scrivere, da li devo mettere il codice per chiudere la telefonata dopo i 20 secondi ?
calcolare il tempo non è un problema ,
se non chiedo troppo mi puoi dire il comando che chiude la telefonata ? Grazie Marco
 
Last edited:

nonno

Active Member
Licensed User
Longtime User
Grazie ad entrambi per i vostri consigli domani provo
Grazie mille
Luca
Marco
 

nonno

Active Member
Licensed User
Longtime User
Non penso sia perfetta ma prova questa.
ciao Luca
questo funziona benissimo per chiudere la telefonata, quello che non riesco a capire sia con questo esempio e che quello di Marco,
si intercetta;
quando parte lo squillo
quando termina la telefonata
quando si riceve la telefona
ma non si riesce ad intercettare lo stato se OFFHOOK / RINGING
uno dei due dovrebbe essere quando l'utente accetta la telefonata, per poter annullare il tempo prefissato a 20 secondi, trascorso il quale chiude la telefonata.
Grazie Mille Luca dei tuoi consigli
 

LucaMs

Expert
Licensed User
Longtime User
There is no direct api for detecting that when the outgoing call answered, but yes Its possible only in Rooted phones Since Android 5.0 this is possible for system apps. But you need to use the hidden Android API.

Traduzione:
Non esistono API dirette per rilevare se viene risposto ad una telefonata in uscita, ma è possibile con telefoni "rootati", dalla versione Android 5.0. Ma si deve utilizzare l'API Android nascosta.

Se ti va bene anche solo da Android 5.0 in su e, soprattutto, solo su telefoni rootati, si dovrà adattare per B4A questo codice Java:
http://stackoverflow.com/questions/13134331/cannot-detect-when-outgoing-call-is-answered-in-android
 

nonno

Active Member
Licensed User
Longtime User
There is no direct api for detecting that when the outgoing call answered, but yes Its possible only in Rooted phones Since Android 5.0 this is possible for system apps. But you need to use the hidden Android API.

Traduzione:
Non esistono API dirette per rilevare se viene risposto ad una telefonata in uscita, ma è possibile con telefoni "rootati", dalla versione Android 5.0. Ma si deve utilizzare l'API Android nascosta.

Se ti va bene anche solo da Android 5.0 in su e, soprattutto, solo su telefoni rootati, si dovrà adattare per B4A questo codice Java:
http://stackoverflow.com/questions/13134331/cannot-detect-when-outgoing-call-is-answered-in-android
Grazie Luca
 
Top