Autore Topic: Registro chiamate  (Letto 1323 volte)

Offline nowire75

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows XP, Linux
Registro chiamate
« il: 25 Ottobre 2011, 10:59:32 CEST »
0
Ciao,

sono vari giorni che cerco di implementare un mio registro chiamate ma con scarso successo. Vi spiego cosa ho fatto. Come prima cosa ho provato a leggere il Call Log. La cosa funziona egregiamente ma non fa per me, per due motivi: è limitato come numero di record e soggetto a modifiche da parte dell'utente. Ho bisogno che i dati siano nel mio database.
Seconda strada: ho implementato un broadcastreceiver e catturato l'evento EXTRA_STATE_OFFHOOK come inizio della chiamata e EXTRA_STATE_IDLE come termine. Anche questo funziona ma il risultato non è soddisfacente per i seguenti motivi: i tempi delle chiamate non sono giusti e vengono inserite anche chiamate senza risposta o a effettivo tempo zero..

Avete qualche suggerimeto?

Grazie

Offline alexAndroid

  • Utente normale
  • ***
  • Post: 185
  • Respect: +27
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Giò
  • Sistema operativo:
    Ubuntu 11.10; Windows XP
Re:Registro chiamate
« Risposta #1 il: 04 Novembre 2011, 14:55:24 CET »
0
Ciao,
purtroppo non ho suggerimenti da poterti dare poiché mi trovo quest'oggi anche io ad affrontare lo stesso problema, o almeno simile.
Ho necessità di memorizzare quando una chiamata inizia, quando c'è l'HangUp (la chiusura) e la durata della chiamata (sia per risposta che per non risposta da parte del destinatario della chiamata).
Hai fatto qualche progresso?
Sei stato aiutato oppure il tuo problema è stato risolto? Allora premi il tasto THANKS E' un modo utile e carino per ringraziare chi ti è stato di aiuto.

Offline nowire75

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows XP, Linux
Re:Registro chiamate
« Risposta #2 il: 04 Novembre 2011, 15:06:32 CET »
0
Ciao,

effettivamente ho fatto qualche progresso. Come suggerito su una risposta che avevo trovato in rete, la cosa migliore da fare era quella di prendere queste informazioni direttamente dal content provider del call log. Così ho fatto e devo dire che funziona. Alla chiusura della telefonata attendo 2 o 3 secondi e dopo vado a leggere il call log interrogandolo su quello che mi serve.
Se hai un po' di pazienza posso postarti un pezzo di codice, attendo che mi portino il mio computer dal quale sviluppo spero in serata o domani

Offline alexAndroid

  • Utente normale
  • ***
  • Post: 185
  • Respect: +27
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Giò
  • Sistema operativo:
    Ubuntu 11.10; Windows XP
Re:Registro chiamate
« Risposta #3 il: 04 Novembre 2011, 20:10:02 CET »
0
Ciao nowire75,
ti ringrazio se riuscissi a postarmi un pò di codice in modo da darci uno sguardo, anche perché io sto partendo da zero. Non conosco i Content Provider nè un metodo per impostare le attese o timer eventuali.
Grazie di cuore.
Sei stato aiutato oppure il tuo problema è stato risolto? Allora premi il tasto THANKS E' un modo utile e carino per ringraziare chi ti è stato di aiuto.

Offline nowire75

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows XP, Linux
Re:Registro chiamate
« Risposta #4 il: 05 Novembre 2011, 10:13:35 CET »
+1
Ciao, allora andiamo per gradi.
Come prima cosa hai implementato il bradcastreceiver e messo i permessi nel manifest? Giusto per capire a che punto sei arrivato. Ti posto il mio vediamo se siamo allineati e poi andiamo avanti con il content provider.

Codice (Java): [Seleziona]
public class CallReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {

                DataChiamate datachiamate = new DataChiamate(context);
                Calendar rightNow = Calendar.getInstance();

                Bundle extras = intent.getExtras();
                if (extras != null) {
                        String state = extras.getString(TelephonyManager.EXTRA_STATE);
                        String numero = extras.getString(Intent.EXTRA_PHONE_NUMBER);
                        String numerochiamante = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
                       
                        if (state != null) {
                               
                                if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {

                                        try {
                                                Thread.sleep(2000);

                                                Utility util = new Utility(context);
                                                Utility.rowCall rowcall = util.getLastCall(context, DataEasy.getInstance()
                                                                .getStartCallTime());
                                               
                                                Log.w("nowire", "Durata " + rowcall.duration + " tipo " + rowcall.calltype + " numero " + rowcall.number);
                                               
                                        } catch (InterruptedException ie) {
                                        }

                                }
                        }
                }
        }

        public void onInit(int status) {

        }
}