Перехід на головний екран програмно


75

Я хочу перейти на головний екран програмно в Android, коли користувач натискає кнопку. Як це можна зробити?


13
будь ласка, прийміть деякі з ваших старих питань.
нікуди

Простий спосіб - перевизначити onBackPress або за допомогою keyEvent = Backpressed і викликати onHomePress на ньому. тоді він буде поводитись як дома Нажатий
AndroidGeek

Відповіді:


172

Ви можете зробити це за допомогою Наміру .

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);

Цей намір запустить програму запуску, яку визначив користувач. Будьте обережні з цим, оскільки це буде виглядати так, як якщо ваша програма цього не очікує.

Якщо ви хочете, щоб це створило кнопку виходу з вашого додатка, прочитайте цю статтю про кнопки виходу в Android


3
Я читав, що це дуже неправильно робити в додатку. Але чому люди це говорять? Я знаю, де я його використовую. І схоже, це єдине, що я можу зробити, щоб робити те, що хочу. То чи нормально це використовувати?
Сударшан Бхат

6
Найпростіша річ, яка працює для мене: startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME));(FLAG_ACTIVITY_NEW_TASK, здається, не потрібна.)
Джонік

Це старіший потік, але хоча це працює, повертаючись до попередньої активності, не працює. Які атрибути цього?
portfoliobuilder

2
@portfoliobuilder, вам просто потрібно видалити FLAG_ACTIVITY_NEW_TASK.
user802421

що означає ACTION_MAINі на що CATAGORY_HOMEпосилається?
Srujan Barai

30

Однорядкове рішення

moveTaskToBack(true); //activity.moveTaskToBack(true);

він буде поводитись, коли натискається кнопка "Домашня сторінка"


Це працює .. Це хороший підхід .. Чи буде це спрацьовувати в кожному випадку?
Прабс

У моїй ситуації це працює нормально. Я не впевнений, працює він у всіх випадках чи ні
AndroidGeek

1
Для мене добре працює (Android 6.x)
dangling_refrenz

1
Це добре працює і для мене (android 7.x)
Сінан Джейлан,

це закриває мою програму (Android 9.x)
Eildosa

11

Відповідь Януша чудова.

Єдине, що я хочу додати, і це занадто довго для коментаря, це те, що ви можете перейти на головний екран, не маючи посилання на поточну активність.

Код Януша потрібно викликати з Activity або Fragment через startActivity(),

Щоб обійти це, ви можете зберегти статичне посилання на контекст ваших програм у файлі програми:

public class YourApplication extends Application
{

    private static Context mAppContext;

    public void onCreate()
    {
        super.onCreate();
        ...
        YourApplication.mAppContext = getApplicationContext();
    }

    public static Context getContext()
    {
        return mAppContext;
    }

}

Тепер ви можете надіслати користувача на головний екран пристрою з будь-якого класу у вашій програмі, а не лише з дій, фрагментів чи інших класів із посиланням на поточну активність (ви можете вирішити, добре це чи погано):

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
YourApplication.getContext().startActivity(startMain);

0

З сайту розробника Android

Ось кілька прикладів інших операцій, які ви можете вказати як наміри, використовуючи ці додаткові параметри:

* ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.

3
stOle, немає нічого поганого в тому, що ви ставите запитання, на які можна відповісти за допомогою швидкого запиту Google та ознайомлення з документацією. Якщо запитання містить правильні ключові слова, воно дуже швидко з’явиться на першій сторінці Google, і набагато швидше знайде правильну інформацію та зразок коду, аніж шукати документацію. Я якось навчений андроїд-програміст, але мені потрібно було б погуглити і пропустити одну-дві сторінки, щоб відповісти на це питання. Було б чудово, якби відповідь на це питання була тут, де його можна редагувати, вдосконалювати, оновлювати та оцінювати.
Януш,

0

Я знаю, що це трохи пізно, але я також зіткнувся з тією ж проблемою, і ось як я її вирішив. Повертаючись до свого, MainActivityвам потрібно додати прапорці з виходуActivity

    final Intent mainActivity = new Intent(this, MainActivity.class);
    mainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    mainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

Тепер, коли ви натискаєте кнопку назад, яка є MainActivityактивною, вона переходить на головний екран.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.