Ana sayfada uygulamada gezinmek için düğmelerim olan bir uygulamam var.
Bu sayfada, tıklandığında kullanıcıyı uygulama simgesinin bulunduğu telefonda ana ekrana götürmesi gereken bir "EXIT" düğmesi var.
Bunu nasıl yapabilirim?
Ana sayfada uygulamada gezinmek için düğmelerim olan bir uygulamam var.
Bu sayfada, tıklandığında kullanıcıyı uygulama simgesinin bulunduğu telefonda ana ekrana götürmesi gereken bir "EXIT" düğmesi var.
Bunu nasıl yapabilirim?
Yanıtlar:
Android'in tasarımı, bir uygulamadan seçimden çıkmayı tercih etmez, daha ziyade işletim sistemi tarafından yönetir. Ev uygulamasını ilgili Niyeti ile getirebilirsiniz:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Belki böyle bir şey deneyebilirsiniz
Diyelim ki başvurumuzda bir takım faaliyetlerimiz var (on diyelim) ve doğrudan bu faaliyetten çıkmamız gerekiyor. Yapabileceğimiz şey, bir niyet yaratmak ve kök etkinliğe gitmek ve niyette bayrağı
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Ayrıca, niyetine boole gibi bazı ekstralar ekleyin
intent.putExtra("EXIT", true);
Sonra kök aktivitede, değerini kontrol boolean
içinde) ve bu çağrı bitirmek (uygun onCreate()
kök aktivitesinin
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
onNewIntent
. Çünkü intnet.getExtras () null değerini korumuştur.
RootActivity
yığından devam etmek yerine yeniden başlatacaktır . Bu aşmak için buraya Kontrol stackoverflow.com/a/26258455/609782
System.exit(0);
Muhtemelen aradığınız şey budur. Tüm uygulamayı kapatacak ve sizi ana ekrana götürecektir.
Bu benim için iyi çalışıyor.
Önceki tüm etkinlikleri aşağıdaki gibi kapatın:
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("Exit me", true);
startActivity(intent);
finish();
Sonra MainActivity onCreate () yönteminde MainActivity'yi bitirmek için bunu ekleyin
setContentView(R.layout.main_layout);
if( getIntent().getBooleanExtra("Exit me", false)){
finish();
return; // add this to prevent from doing unnecessary stuffs
}
önce uygulamanızı yöntemi kullanarak bitirin finish();
ve onDestroy Kaldırma Kuvveti için aşağıdaki satırları ekleyin kapat
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
super.onDestroy()
sonra killProcess()
? hatta bu hatta ulaşılabilir mi?
Bir aktiviteyi bitirmek istiyorsanız, sadece arayabilirsiniz finish()
. Ancak ekranda bir çıkış düğmesi olması kötü bir uygulamadır.
Bazı Aktiviteler, Geri düğmesine böyle Açılış Ekranı Etkinliği, Karşılama Ekranı Etkinliği, Onay Pencereleri'ne basıldığında tekrar açmak istemezsiniz. Aslında aktivite yığınında buna ihtiyacınız yok. => open manifest.xml dosyasını kullanarak bunu yapabilir ve bir nitelik ekleyebilirsiniz
android: noHistory = "true"
bu faaliyetlere.
<activity
android:name="com.example.shoppingapp.AddNewItems"
android:label=""
android:noHistory="true">
</activity>
VEYA
Bazen belirli geri düğmesine basarak tüm uygulamayı kapatmak istersiniz. Burada en iyi uygulama uygulamadan çıkmak yerine ana pencereyi açmaktır. Bunun için onBackPressed () yöntemini geçersiz kılmanız gerekir. genellikle bu yöntem yığındaki en üst etkinliği açar.
@Override
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);
}
VEYA
Geri düğmesine basıldığında o etkinlikten çıkmak istersiniz ve ayrıca bunu etkinlik yığınına eklemek istemezsiniz. onBackPressed () yöntemi içinde call finish () yöntemini çağırın. tüm uygulamayı kapatmaz. yığındaki bir önceki etkinliğe gider.
@Override
public void onBackPressed() {
finish();
}
Android Uygulamanızdan çıkmanız önerilmez. Daha fazla ayrıntı için bu soruya bakın.
Kullanıcı, uygulamanızı her zaman ana sayfa düğmesinden veya ilk etkinlikte geri düğmesi aracılığıyla kapatabilir.
(Önceki yanıtları denedim ama bazı noktalarda eksikler. Örneğin return;
, etkinliği bitirdikten sonra bir şey yapmazsanız , kalan etkinlik kodu çalışır. Ayrıca, dönüş ile onCreate'ı düzenlemeniz gerekir. Super.onCreate () bir çalışma zamanı hatası alırsınız)
Söyle MainActivity
ve var ChildActivity
.
Inside ChildActivity bunu ekleyin:
Intent intent = new Intent(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
return true;
Inside MainActivity's onCreate bunu ekleyin:
@Override
public void onCreate(Bundle savedInstanceState) {
mContext = getApplicationContext();
super.onCreate(savedInstanceState);
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
return;
}
// your current codes
// your current codes
}
Uygulama ile ilgili yığıntaki tüm görevleri kapatmak için FinishAffinity yöntemini kullanmak için başka bir seçenek daha vardır.
İşte yaptığım şey:
SomeActivity.java
@Override
public void onBackPressed() {
Intent newIntent = new Intent(this,QuitAppActivity.class);
newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(newIntent);
finish();
}
QuitAppActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish();
}
Temel olarak yaptığınız şey, QuitAppActivity
görevi bitirecek olan yığın ve başlatma işlemlerinden temizlenir .
Sonra hatları aşağıdaki ekleyin finish();
içinde onDestroy()
:
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
Aşağıdaki kod snippet'i kullanarak uygulamadan çıkmayı denedim, bu benim için çalıştı. Umarım bu size yardımcı olur. 2 aktivite ile küçük demo yaptım
ilk aktivite
public class MainActivity extends Activity implements OnClickListener{
private Button secondActivityBtn;
private SharedPreferences pref;
private SharedPreferences.Editor editer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
secondActivityBtn=(Button) findViewById(R.id.SecondActivityBtn);
secondActivityBtn.setOnClickListener(this);
pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
editer = pref.edit();
if(pref.getInt("exitApp", 0) == 1){
editer.putInt("exitApp", 0);
editer.commit();
finish();
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.SecondActivityBtn:
Intent intent= new Intent(MainActivity.this, YourAnyActivity.class);
startActivity(intent);
break;
default:
break;
}
}
}
başka herhangi bir faaliyetin
public class YourAnyActivity extends Activity implements OnClickListener {
private Button exitAppBtn;
private SharedPreferences pref;
private SharedPreferences.Editor editer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_any);
exitAppBtn = (Button) findViewById(R.id.exitAppBtn);
exitAppBtn.setOnClickListener(this);
pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
editer = pref.edit();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.exitAppBtn:
Intent main_intent = new Intent(YourAnyActivity.this,
MainActivity.class);
main_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(main_intent);
editer.putInt("exitApp",1);
editer.commit();
break;
default:
break;
}
}
}
Gözlemci modda yaptım.
Gözlemci arayüzü
public interface Observer {
public void update(Subject subject);
}
Temel Konu
public class Subject {
private List<Observer> observers = new ArrayList<Observer>();
public void attach(Observer observer){
observers.add(observer);
}
public void detach(Observer observer){
observers.remove(observer);
}
protected void notifyObservers(){
for(Observer observer : observers){
observer.update(this);
}
}
}
Alt Konu çıkış yöntemini uygular
public class ApplicationSubject extends Subject {
public void exit(){
notifyObservers();
}
}
Uygulamanızın genişletmesi gereken Uygulamam
public class MyApplication extends Application {
private static ApplicationSubject applicationSubject;
public ApplicationSubject getApplicationSubject() {
if(applicationSubject == null) applicationSubject = new ApplicationSubject();
return applicationSubject;
}
}
Temel Etkinlik
public abstract class BaseActivity extends Activity implements Observer {
public MyApplication app;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
app = (MyApplication) this.getApplication();
app.getApplicationSubject().attach(this);
}
@Override
public void finish() {
// TODO Auto-generated method stub
app.getApplicationSubject().detach(this);
super.finish();
}
/**
* exit the app
*/
public void close() {
app.getApplicationSubject().exit();
};
@Override
public void update(Subject subject) {
// TODO Auto-generated method stub
this.finish();
}
}
hadi test edelim
public class ATestActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
close(); //invoke 'close'
}
}
uygulamadan çıkmak istiyorsanız bu kodu fonksiyonunuza ekleyin
public void yourFunction()
{
finishAffinity();
moveTaskToBack(true);
}
//For an instance, if you want to exit an application on double click of a
//button,then the following code can be used.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 2) {
// do something on back.
From Android 16+ you can use the following:
finishAffinity();
moveTaskToBack(true);
}
return super.onKeyDown(keyCode, event);
}
% 100 iyi çalışıyor. bu onClick (Yöntem) uygulamanızdan çıkma kodu
Button exit = (Button)findViewById(R.id.exitbutton);
exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
Toast.makeText(getApplicationContext(), "Closed Completely and Safely", Toast.LENGTH_LONG).show();
}
});
Uygulamayı en aza indirmek moveTaskToBack(true)
için çıkış düğmelerinizi ekleyebilirsiniz onClickedListener
.
Umarım yardımcı olur.
Belki kodum hepls (Main_Activity.java) olabilir:
@Override
protected void onDestroy() {
super.onDestroy();
this.finish();
exit(0);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch(keyCode) {
case KeyEvent.KEYCODE_BACK:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("My application").setMessage("Keep playing?").setIcon(R.drawable.icon);
// Go to backgroung
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { moveTaskToBack(true); }
});
// Exit from app calling protected void onDestroy()
builder.setNegativeButton("CLOSE APPLICATION", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { onDestroy(); }
});
// Close this dialog
builder.setNeutralButton("CANCEL", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { dialog.cancel(); }
});
AlertDialog dialog = builder.create();
dialog.show();
return true;
}
return false;
}
Başvurunuzdan çıkmak istiyorsanız. Ardından düğmeye basılan etkinliğin içindeki bu kodu kullanın. sevmek:
public void onBackPressed()
{
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}