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);
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
Hedef uygulama elbette bir Niyet ile bu yeteneği yayınlamadıkça. – EJK