2013-01-19 13 views
16

Bu bence temel bir soru. Bir etkinliği niyetle durdurmak için herhangi bir seçenek var mı.Niyet kullanarak android bir aktivite nasıl durdurulur?

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

Bu benim kodum. Bu aktiviteyi durdurmak istiyorum (yani, bu çağrıyı bırakmak istiyorum) kullanıcı meşgulse veya bir şey varsa. Bunun için ne yapabilirim? Denedim:

Ancak kullanışsız. Herhangi bir öneri var mı?

+1

Niyetini durdurmak için bulduğum tek yol, bir uygulama diğerini öldürürse güvenlik ihlali olur gibi görünüyor. – EJK

+0

Hedef uygulama elbette bir Niyet ile bu yeteneği yayınlamadıkça. – EJK

cevap

23

Bu problemi birkaç gün önce yaşadım ve size bunun hakkında bir yol bulduğumu söylemekten mutluluk duyuyorum. Her şeyden

Öncelikle etkinliğe sen AndroidManifest.xml bu eklemek durdurmak istiyorum: Ben CheckBox örneği kullanmak için gidiyorum

android:launchMode="singleTop" 

. İşaretlendiğinde etkinlik başlatılır ve işaretlenmediğinde etkinlik öldürülür.

Örnek Etkinlik A, Etkinlik B'yi çağırıyor ve ardından bir amaç kullanarak öldürüyor.

Kod A konulmak:

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(); 
    } 
} 

Açıklama: Bu temelde yapar nedir, onay kutusu işaretlendiğinde o aktiviteyi çağırır ve

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); 
      } 
     } 
    }); 

Kod B konması bir boole değeri geçirir, eğer doğruysa etkinlik canlı tutulur ve ön plana çıkarılır. Şimdi, bayrağı singleTop iletmezseniz, bu etkinliğin birçok örneği oluşturulur. singleTop sadece aynı örneğin çağrıldığından emin olur. Şimdi, onay kutusu işaretlenmediğinde, B içinde doğrulanmış olan yeni bir değer geçirilir. B işaretlenmemişse, Etkinlik A yanlış olarak iletilir ve bu nedenle B, onNewIntent() işlevinin içinden kendini sonlandırır.

P.S - Başka bir Etkinlikten de Etkinlik B'yi kapatabilirsiniz. diğer etkinlik C ise sadece kullanın:

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

Çok teşekkürler Torcellite !! Bu bana çok yardımcı olabilir. – Tony

+0

@Tony Her zaman, başkalarının bunu izleyebilmeleri için onu görüntülemesi için oy vermeyin :) –

+0

@Tony Ayrıca, B koduyla biraz deneme yapın, bildiğimden beri çok iyi çalışmayabilir tam olarak ne istiyorsun. –

0

Sen oyun mağazasının arka plan verilerini kapatın ve sadece diyecekler .it oyun deposu giren değil hizmet oynayabilir, "yüklenemedi" Thats

+0

@Sree Burada bağlantı nerede? –

İlgili konular