2013-01-19 16 views
16

Penso che questa sia una domanda di base. C'è qualche opzione per fermare un'attività utilizzando l'intento.Come interrompere un'attività in Android utilizzando l'intento?

Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:5554")); 
startActivity(intent); 

Questo è il mio codice. Vorrei interrompere questa attività (Ciò significa che voglio abbandonare questa chiamata) se l'utente è occupato o qualcosa del genere. Cosa posso fare per quello? Ho provato questo:

if (condition) { 
    Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:5554")); 
    startActivity(intent); 
}else { 
    this.finish(); 
} 

Ma di nessuna utilità. Qualcuno ha un suggerimento?

+1

Sembra che sarebbe una violazione di sicurezza se un'applicazione potrebbe uccidere un altro. – EJK

+0

A meno che l'applicazione di destinazione non abbia pubblicato questa funzionalità tramite un Intento. – EJK

risposta

23

Ho avuto questo problema alcuni giorni fa, e sono felice di dirvi che ho trovato un modo per aggirare questo.

Prima di tutto, per l'attività che si vuole fermare aggiungere questo nel AndroidManifest.xml:

android:launchMode="singleTop" 

ho intenzione di usare un esempio CheckBox. Quando viene controllato, l'attività viene avviata e, quando deselezionata, uccide l'attività.

Attività di esempio A chiama l'attività B e quindi lo uccide utilizzando un intento.

Codice da mettere in A:

checkbox.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      Intent intent = new Intent(A.this, B.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      if (enable.isChecked()) { 
       intent.putExtra("keep", true); 
       startActivity(intent); 
      } 
      else 
      { 
       intent.putExtra("keep", false); 
       startActivity(intent); 
      } 
     } 
    }); 

Codice da mettere in B:

boolean keep; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.B); 
    intent = this.getIntent(); 
    boolean keep = intent.getExtras().getBoolean("keep"); 
    if(keep==true) 
    { 
     //execute your code here 

    } 
} 
    @Override 
protected void onNewIntent(Intent intent) 
{ 
    super.onNewIntent(intent); 
    keep = intent.getExtras().getBoolean("keep"); 
    if(keep==false) 
    { 
     B.this.finish(); 
    } 
} 

Spiegazione: Quello che fa è fondamentalmente, quando la casella è selezionata si chiama l'attività e passa un valore booleano, se è vero l'attività viene tenuta in vita e portata in primo piano. Ora, se non superi il flag singleTop, verranno create molte istanze di questa attività. singleTop si assicura che venga chiamata solo la stessa istanza. Ora, quando la casella di spunta è deselezionata, viene passato un nuovo valore per keep che viene verificato in B. Se deselezionata, l'attività A passerà falsa, e quindi B termina all'interno della funzione onNewIntent().

P.S - È possibile chiudere l'attività B anche da un'altra attività. Basta usare Se l'altra attività è C:

Intent intent = new Intent(C.this, B.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
intent.putExtra("keep", false); 
startActivity(intent); 
+0

Grazie mille Torcellite !! Questo può aiutarmi molto. – Tony

+0

@Tony In qualsiasi momento, vota per gli altri per visualizzarlo nel caso in cui si incontrassero :) –

+0

@Tony Inoltre, sperimentare un po 'il codice in B, potrebbe non funzionare molto bene a meno che non lo sappia cosa esattamente vuoi –

0

È possibile disattivare i dati del Play Store di sfondo e riprodurre i servizi per non entrare nel play store .it sarà semplicemente dire, "Impossibile caricare" Questo è l'unico modo in cui ho trovato di fermare l'intenzione

+0

@ Sree Dov'è il link qui? –

Problemi correlati