web-dev-qa-db-ja.com

アプリケーションを終了してホーム画面を表示する方法

私は、ホームページ上のアプリケーションを介してナビゲーションするためのボタンがあるアプリケーションを持っています。

そのページに私はボタンをクリックするとアプリケーションアイコンがある電話のホームスクリーンに行くべきである「終了」ボタンがあります。

どうやってやるの?

192
poojan9118

Androidの設計では、アプリケーションを好みで終了させるのではなく、OSによって管理しています。 Homeアプリケーションは、対応するIntentによって起動できます。

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
320
ognian

このようなことを試すことができますか

私たちのアプリケーションでは、いくつかのアクティビティ(たとえば10)があり、このアクティビティから直接終了する必要があるとします。できることは、インテントを作成してルートアクティビティに移動し、インテントに次のようにフラグを設定することです。

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

また、意図にブール値のようないくつかの余分なものを追加する

intent.putExtra("EXIT", true);

次に、ルートアクティビティで、ルートアクティビティのonCreate()で、booleanの値を確認し、その呼び出しに従ってfinish()を呼び出します。

if (getIntent().getBooleanExtra("EXIT", false)) {
 finish();
}
72
Kartik Domadiya
System.exit(0);

おそらくあなたが探しているものです。それは全体のアプリケーションを閉じて、ホーム画面にあなたを連れて行きます。

28
Ndupza

これは私にはうまくいきます。
以下のように、以前のすべての活動を閉じます。

    Intent intent = new Intent(this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("Exit me", true);
    startActivity(intent);
    finish();

それからMainActivity onCreate()メソッドでこれを追加してMainActivityを完成させます。

    setContentView(R.layout.main_layout);

    if( getIntent().getBooleanExtra("Exit me", false)){
        finish();
        return; // add this to prevent from doing unnecessary stuffs
    }
25
Lazy Ninja

メソッドfinish();を使って最初にアプリケーションを終了する

次に、Forceを削除するためにonDestroyに以下の行を追加しますclose

Android.os.Process.killProcess(Android.os.Process.myPid());
super.onDestroy();
23
user1699548

アクティビティを終了したい場合は、単にfinish()を呼び出すことができます。しかし、画面上に終了ボタンを表示するのは悪い習慣です。

19
Christian

Androidアプリケーションを終了することはお勧めできません。詳しくは question をご覧ください。

ユーザーは、ホームボタンまたは最初のアクティビティで戻るボタンを使っていつでもアプリを終了できます。

16
Janusz

スプラッシュスクリーンアクティビティ、ウェルカムスクリーンアクティビティ、確認ウィンドウなどの戻るボタンが押されたときに、実際には再び開きたくないアクティビティがあります。実際にはアクティビティスタックでこれは必要ありません。 => open manifest.xmlファイルを使ってこれを行い、属性を追加することができます。

Android:noHistory = "true"

これらの活動に。

<activity
    Android:name="com.example.shoppingapp.AddNewItems"
    Android:label="" 
    Android:noHistory="true">
</activity>

OR

時にはあなたは特定の戻るボタンを押してアプリケーション全体を閉じることを望みます。ここでのベストプラクティスは、アプリケーションを終了するのではなくホームウィンドウを開くことです。そのためにはonBackPressed()メソッドをオーバーライドする必要があります。通常このメソッドはスタックの一番上のアクティビティを開きます。

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

}

OR

戻るボタンを押すと、そのアクティビティを終了したいのですが、アクティビティスタックに追加したくないでしょう。 onBackPressed()メソッド内でfinish()メソッドを呼び出します。アプリケーション全体を閉じることはありません。スタックの前のアクティビティに移動します。

@Override
public void onBackPressed() {
  finish();
}
16
Burusothman

(私は以前の答えを試しましたが、いくつかの点で欠けています。例えば、アクティビティ終了後にreturn;を実行しない場合、残りのアクティビティコードが実行されます。 )あなたはランタイムエラーが発生します)

MainActivityChildActivityがあるとします。

Inside ChildActivityにこれを追加します。

Intent intent = new Intent(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
return true;

MainActivityのonCreate内にこれを追加します。

@Override
public void onCreate(Bundle savedInstanceState) {

    mContext = getApplicationContext();

    super.onCreate(savedInstanceState);

    if (getIntent().getBooleanExtra("EXIT", false)) {
        finish();
        return;
    }
    // your current codes
    // your current codes
}
5
trante

アプリに関連するスタック内のすべてのタスクを閉じるためにFinishAffinityメソッドを使用するという別のオプションもあります。

参照してください: https://stackoverflow.com/a/27765687/1984636

4
sivi

これが私がしたことです:

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

基本的にあなたがしたことはスタックからすべてのアクティビティをクリアしてQuitAppActivityを起動することで、タスクは終了します。

3
Irshu

そのアクティビティのfinish onDestroy()が呼び出され、アクティビティスタックの前のアクティビティに戻ります。

3
Isham

オブザーバモードでやった。

オブザーバインタフェース

public interface Observer {
public void update(Subject subject);
}

ベース科目

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

子サブジェクトはexitメソッドを実装しています

public class ApplicationSubject extends Subject {
public void exit(){
    notifyObservers();
}
}

あなたのアプリケーションがそれを拡張する必要があるMyApplication

public class MyApplication extends Application {

private static ApplicationSubject applicationSubject;

public ApplicationSubject getApplicationSubject() {
            if(applicationSubject == null) applicationSubject = new ApplicationSubject();
    return applicationSubject;
}

}

基本アクティビティ

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

}

テストしましょう

public class ATestActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    close(); //invoke 'close'
}
}
0
Hunter

私は次のコードスニペットを使用してアプリケーションを終了しようとしました、これはそれが私のために働いた。これがお役に立てば幸いです。私は2つの活動で小さなデモをしました

最初の活動

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

その他の活動

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

100%正常に動作します。これはアプリを終了するonClick(メソッド)のコードです。

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

        }
    });
0
Vivek Akkaldevi

finish();onDestroy()の後に次の行を追加してください。

Android.os.Process.killProcess(Android.os.Process.myPid());
super.onDestroy();
0
Ramanathan

あなたがアプリケーションを終了したい場合は、あなたの関数の下にこのコードを入れて

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);
}
0
Dila Gurung