Autore Topic: Richiamare un'Activity passata in secondo piano  (Letto 960 volte)

Offline alexAndroid

  • Utente normale
  • ***
  • Post: 185
  • Respect: +27
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Giò
  • Sistema operativo:
    Ubuntu 11.10; Windows XP
Richiamare un'Activity passata in secondo piano
« il: 21 Novembre 2011, 13:01:59 CET »
0
Salve a tutti,
devo sviluppare un'applicazione che fa partire una chiamata, ma al riaggancio devo tornare alla mia Activity. Di regola quando riagganci una chiamata, Android rimane sul registro chiamate per visualizzare i dettagli delle ultime chiamate. Qualcuno sa come aiutarmi?
Questo è il pezzetto di codice che uso per lanciare la chiamata
Codice (Java): [Seleziona]
public class MainActivity extends Activity
// ............ codice ..................
private void call() {
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:12345678"));
        startActivity(callIntent);
    }
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 Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Richiamare un'Activity passata in secondo piano
« Risposta #1 il: 21 Novembre 2011, 13:24:51 CET »
+1
Hai per caso provato ad usare startActivityForResult al posto di startActivity ?

Offline alexAndroid

  • Utente normale
  • ***
  • Post: 185
  • Respect: +27
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Giò
  • Sistema operativo:
    Ubuntu 11.10; Windows XP
Re:Richiamare un'Activity passata in secondo piano
« Risposta #2 il: 21 Novembre 2011, 15:51:48 CET »
0
Hai per caso provato ad usare startActivityForResult al posto di startActivity ?
Ricky ti ringrazio per l'aiuto ma ancora non funziona come vorrei. Ho provato a sostituire con startActivityForResult (capendo prima di cosa esso si trattasse). Il codice è questo:
Codice (Java): [Seleziona]
private void call() {
        final int CALL_REQUEST_CODE = 2;
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:123456"));
        startActivityForResult(callIntent, CALL_REQUEST_CODE);
    }
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.i("DetectCalls", "onActivityResult: "+requestCode+" "+resultCode);
        super.onActivityResult(requestCode, resultCode, data);
    }
Ma il risultato è far partire la chiamata. Quando la chiamata è partita, ad un tratto appare la dialog <<CALL NOT SEND. OK>>
Premendo ok la chiamata viene trattenuta e ritorna sulla mia applicazione; però la chiamata risulta ancora attiva ed il tempo scorre  ???
Quello che vorrei è che la chiamata venga conclusa normalmente ed al termine reindirizzarmi sulla mia applicazione
« Ultima modifica: 22 Novembre 2011, 15:40:56 CET da alexAndroid »
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 alexAndroid

  • Utente normale
  • ***
  • Post: 185
  • Respect: +27
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Giò
  • Sistema operativo:
    Ubuntu 11.10; Windows XP
Richiamare un'Activity passata in secondo piano dopo una chiamata
« Risposta #3 il: 22 Novembre 2011, 15:39:51 CET »
0
Problema risolto: creando un Listener si ascolta quando una chiamata è attiva e quando viene disconnessa. Nel momento in cui passa da ATTIVA a INATTIVA allora lancio la mia Activity. POSTO il codice nel caso in cui a qualcuno potesse interessare.
Codice (Java): [Seleziona]
public class MainActivity extends Activity {
        private TelephonyManager telephonyManager;
        /* Classe interna che estende PhoneStateListener */
        public class CallEndedListener extends PhoneStateListener {
                boolean called = false;
                @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                if (called && state == TelephonyManager.CALL_STATE_IDLE) {
                    called = false;
                    Log.i("DetectCalls", "Chiamata TERMINATA, disabilito CallEndedListener");
                    telephonyManager.listen(this, PhoneStateListener.LISTEN_NONE);
                    try {
                        MainActivity.this.finish();
                        Intent intent = new Intent(MainActivity.this, MainActivity.class);
                        intent.setAction(Intent.ACTION_MAIN);
                        startActivity(intent);
                    } catch (Exception e) { e.printStackTrace(); }
                } else {
                    if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
                        called = true;
                        Log.i("DetectCalls", "Chiamata IN CORSO: "+called);
                    }
                }
            }
        }          // Fine classe CallEndedListener

/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);    
        telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        Button buttonChiama = (Button)findViewById(R.Button.buttonChiama);
        buttonChiama.setOnClickListener(new View.OnClickListener() {
        /**
          * @author alex
          */

                        @Override
                        public void onClick(View v) {
                                telephonyManager.listen(new CallEndedListener() , PhoneStateListener.LISTEN_CALL_STATE);
                                call();
                        }
                });
    }
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.