Очищення наміру


111

Мій додаток Android викликає наміри, які передають інформацію (очікує намір у рядку стану).

Коли я натискаю кнопку "Додому" і знову відкриваю додаток, утримуючи кнопку "додому", він знову викликає наміри, і ті ж додаткові елементи все ще є.

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
      super.onSaveInstanceState(savedInstanceState);
    }
    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
      super.onRestoreInstanceState(savedInstanceState);
    }

це код, який не працює так, як належить

    String imgUrl;
    Bundle extras = this.getIntent().getExtras();


    if(extras != null){
        imgUrl = extras.getString("imgUrl");
        if( !imgUrl.equals(textView01.getText().toString()) ){

            imageView.setImageDrawable( getImageFromUrl( imgUrl ) );
            layout1.setVisibility(0);
            textView01.setText(imgUrl);//textview to hold the url

        }

    }

І мій намір:

public void showNotification(String ticker, String title, String message, 
    String imgUrl){
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager mNotificationManager = 
        (NotificationManager) getSystemService(ns);
    int icon = R.drawable.icon;        // icon from resources
    long when = System.currentTimeMillis();         // notification time
    CharSequence tickerText = ticker;              // ticker-text

    //make intent
    Intent notificationIntent = new Intent(this, activity.class);
    notificationIntent.putExtra("imgUrl", imgUrl);
    notificationIntent.setFlags(
        PendingIntent.FLAG_UPDATE_CURRENT | 
        PendingIntent.FLAG_ONE_SHOT);
    PendingIntent contentIntent = 
        PendingIntent.getActivity(this, 0, 
        notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | 
        PendingIntent.FLAG_ONE_SHOT);

    //make notification
    Notification notification = new Notification(icon, tickerText, when);
    notification.setLatestEventInfo(this, title, message, contentIntent);
    //flags
    notification.flags = Notification.FLAG_SHOW_LIGHTS | 
        Notification.FLAG_ONGOING_EVENT | 
        Notification.FLAG_ONLY_ALERT_ONCE | 
        Notification.FLAG_AUTO_CANCEL;
    //sounds
    notification.defaults |= Notification.DEFAULT_SOUND;
    //notify
    mNotificationManager.notify(1, notification);
}

Чи є спосіб очистити наміри або перевірити, чи використовувався він раніше?


Чи можете ви розмістити свої коди?
xandy

Я додав код до свого питання
Марс

Замість того, щоб очистити Намір, ви можете визначити тип запуску та відповідно обробити потік програми. Отримуйте додатки лише в тому випадку, якщо він запущений для сповіщення, а не з фону. stackoverflow.com/questions/4116110/clearing-intent/…
BB

Відповіді:


168

ОНОВЛЕННЯ:

Я не усвідомлював, що ця відповідь настільки посилатиметься, коли я вперше написав її більше 5 років тому!

Я уточню, щоб зазначити, що відповідно до відповіді @ tato-rodrigo це не допоможе вам виявити вже оброблений намір у деяких ситуаціях.

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


У мене було саме таке питання.

Вище відповідь поставив мене на правильний шлях, і я знайшов ще простіше рішення, використовуйте:

getIntent().removeExtra("key"); 

виклик методу для "очищення" наміру.

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


4
чи метод useExtra () не приймає параметр String? як цей getIntent (). removeExtra ("Рядок");
tony9099

25
@Maks Я можу помилятися, але, думаю, це не вийде за наступного сценарію: 1) відкрити діяльність через повідомлення; 2) закінчити діяльність натисканням кнопки "назад"; 3) Відновіть діяльність через історію (останні програми). Інший випадок, коли система вбиває додаток через брак ресурсів (увімкніть "Не тримати діяльність" під налаштуваннями розробника, а після цього просто натисніть додому, а потім знову відкрийте активність з історії). Я розмістив рішення, яке використовую нижче. Якщо ви могли б прокоментувати це, було б добре.
tato.rodrigo

2
На жаль, це не працює для нас. Ми виявляємо, що запуск нової діяльності, яка, в свою чергу, починає початкову діяльність, змушує OnNewIntent знову запускатись з тим же наміром.
Le-roy Staines

2
Замість того, щоб очистити Намір, ви можете визначити тип запуску та відповідно обробити потік програми. Отримуйте додатки лише в тому випадку, якщо він запущений для сповіщення, а не з фону. stackoverflow.com/questions/4116110/clearing-intent/…
BB

2
Не працювало для мене. Я зіткнувся з тією ж проблемою, що і згаданий @ tato.rodrigo, де намір не видалявся, якщо діяльність відкривається за допомогою сповіщення або з історії чи інших причин, про які він згадував, тож, що я зробив після споживання інформації про наміри, було скидання наміру, як це setIntent(new Intent())та його добре працює зараз.
Шубхрал

43

EDIT: я редагую, щоб опублікувати повне рішення, яке я використовую.

Це рішення спрацює, якщо проблема "Не виконувати якийсь код, коли діяльність починається з історії (Останні програми)" .

Перш за все, вкажіть booleanу своєму документі, Activityщоб вказати, чи Intentбуло спожито вже:

    private boolean consumedIntent;

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

    private final String SAVED_INSTANCE_STATE_CONSUMED_INTENT = "SAVED_INSTANCE_STATE_CONSUMED_INTENT";

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean(SAVED_INSTANCE_STATE_CONSUMED_INTENT, consumedIntent);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //set content view ...

        if( savedInstanceState != null ) {
            consumedIntent = savedInstanceState.getBoolean(SAVED_INSTANCE_STATE_CONSUMED_INTENT);
        }

        //other initializations
    }

Тепер перевірте, чи можете ви запустити код за onResumeметодом.

    @Override
    protected void onResume() {
        super.onResume();

        //check if this intent should run your code
        //for example, check the Intent action
        boolean shouldThisIntentTriggerMyCode = [...];
        Intent intent = getIntent();
        boolean launchedFromHistory = intent != null ? (intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0 : false;
        if( !launchedFromHistory && shouldThisIntentTriggerMyCode && !consumedIntent ) {
            consumedIntent = true;
            //execute the code that should be executed if the activity was not launched from history
        }
    }

Крім того, якщо ваш Activityналаштовано singleTop, вам слід скинути прапор, коли Intentбуде доставлено новий .

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        consumedIntent = false;
    }

12
Дуже дякую! Мені допоміг цей код, (intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)тому тепер я можу зрозуміти, коли початок діяльності з історії, і я можу ігнорувати мої додаткові послуги.
Роман Назаревич

1
@Lemberg У мене така ж проблема, і я вирішив так само, як і ви. Якщо ви використовуєте додаткові додатки, отримані з push-сповіщень, є ризик почати свою діяльність з історії, а завжди споживайте ваші додаткові послуги та переспрямовуйте на ті самі дії, як ваша push повідомлення. Прапор, розгорнутийІз історії, може допомогти вам це знати
Стойчо Андрєєв,

це буде працювати, навіть якщо діяльність була знищена, і ми знову відкриємо її із стека історії?
користувач25

чудово! це, здається, працює, навіть якщо додаток було знищено ... але будь-ласка, видаліть @ tato.rodrigo boolean shouldThisIntentTriggerMyCode = [...];з відповіді (для чого це використовується?)
користувач25

У моєму випадку з кількома сповіщеннями для певного користувача краще користувач, consumedIntentоскільки Stringмістить Uid-повідомлення. Цей Uid може бути просто доданий до сповіщення в бекенде як поточна мітка часу. Також слід зберігати цей Uid onSaveInstanceStateлише у тому випадку, якщо наміри надходять у форму onCreate. Це означає, що ви не повинні рятувати Uid від onNewIntent.
Костянтин Конопко

22

Відповідь Макса працює для очищення додаткової:

    getIntent().removeExtra("key"); 

Ще одна корисна команда:

    getIntent().setAction("");

Ви також можете позначити намір, зателефонувавши:

    getIntent().putExtra("used", true);

а потім просто перевірте значення.


21

Коли ми запускаємо програми Android з історії (Останні додатки), додаток можна запустити, в основному, трьома різними прапорами намірів.

  1. FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
    Це коли запускається діяльність з історії програми, яка була мінімізована (довге натискання домашньої клавіші).
    Постійне значення: 1048576 (0x00100000)
  2. FLAG_ACTIVITY_NEW_TASK
    Це відбувається, коли діяльність запускається за допомогою "клацання піктограми програми" або через " Фільтри наміру ". Тут діяльність стане початком нового завдання на цьому стеку історії.
    Постійне значення: 268435456 (0x10000000)
  3. FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY | FLAG_ACTIVITY_NEW_TASK
    Це коли додаток було закрито натисканням кнопки "назад", а потім відновленням з "Історії" (останні програми).
    Постійне значення: 269484032 (0x10100000)

Постійне значення можна отримати за допомогою getIntent().getFlags()

У третьому випадку Android перезавантажує останні пам'яті значення зі своєї пам'яті. Таким чином, ваш додаток (getIntent ) буде мати значення з останнього наміру, який запустив додаток.

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

 <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER"/>
 </intent-filter>

Але в третьому випадку (додаток, що вийшов, запускається з Історії останніх додатків), ОС Android використовує останній намір, який запустив додаток до його виходу (за допомогою натискання кнопки назад). Таким чином, у вас є старі значення намірів, і потік додатків не належний.

Видалення наміру - це один із способів вирішити його, але це не вирішило б питання повністю! Коли ОС Android перезавантажує Намір з останнього запуску програм, а не останній екземпляр наміру запуску.

Чистий спосіб уникнути цього - це впоратися з цим шляхом отримання типу Намір для визначення типу запуску.

Так що в вашому LaunchActivity (той , який має намір фільтра , певний в маніфесті), ви можете використовувати наступний код в onCreate(), onStart()або onResume()методах.

if(getIntent().getFlags() == (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)) {
    //app is launched from recent apps after it was closed
        normalLaunch();
    } else {
        String intentAction = getIntent().getAction();
        String scheme = getIntent().getScheme();
        //app is launched via other means
        // URL intent scheme, Intent action etc
        if("https".equalsIgnoreCase(scheme)) {
            // URL intent for browser
        } else if("com.example.bb".equalsIgnoreCase(intentAction)) {
            // App launched via package name
        } else {
            // App was launched via Click on App Icon, or other means
            normalLaunch();
        }
    }

Я припускаю normalLaunch(), не повинен використовувати параметри з Намір; інакше вам потрібно буде відокремити та оптимізувати ваш метод запуску за замовчуванням, щоб не використовувати параметри наміру.


1
Не всі герої носять шапки!
Sdghasemi

Я не знаю, але це завжди повертає істину, getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORYне має значення, якщо я починаю діяльність з іншої діяльності (метод startActivity) або знову відкриваю її зі стека історії (останні програми).
користувач25

вам доведеться використовувати його в поєднанні з іншими прапорами, можливо FLAG_ACTIVITY_NEW_TASK
BB

1
Це не спрацьовує, коли активність була вбита у фоновому режимі через налаштування Dev "Не тримати діяльність". У цьому випадку getIntent () getFlags () ідентичний тому, коли діяльність розпочалася вперше.
Малахіаш

оцініть пояснення, але це не за призначенням
Azlan Jamal

18

Очищення об'єкта наміру :

intent.replaceExtras(new Bundle());
intent.setAction("");
intent.setData(null);
intent.setFlags(0);

2
Це має бути прийнятою відповіддю. Працює дуже добре!
Мартін Ерліч

2
Не працює, коли "не тримати діяльність" перевіряється на параметри розробника
Jemshit Iskenderov

8

Коротка відповідь - Ні в якому разі

Довга відповідь. Немає такого поняття, як намір "одним ударом". З експерименту видно, що недавня історія активності в сучасних андроїдах - це не що інше, як "історія намірів". Останній намір, переданий діяльності, просто входить у систему, і ось угода. Народні люди пропонують використовувати

setAction("")

Але це не працює, тому що наміри вже реєструються до моменту, коли ви потрапите всередину методом OnNewIntent () або onStart ().

Я вирішив проблему, уникаючи використання намірів. Моя проблема була схожа на ту, яку опублікував автор. Я спробував реалізувати глобальний вихід з програми через контроль в області повідомлень. Він повинен зупинити базовий сервіс і закрити всі дії програми. Ви можете знайти таку поведінку в додатку Waze.

Алгоритм:

  1. Створіть PendingIntent для контролю сповіщень, який передає дію "Вихід" на активність. Але до спеціальної діяльності, яка є простим проксі.
  2. Активність проксі-коду onStart () аналізує наміри, перевіряє дії та встановлює стан деякої моделі на "Вийшов".
  3. Активність проксі-коду onStart () очищає оригінальний намір за допомогою setIntent (""), а потім пересилає його до призначення "Root", викликаючи startActivity (intennt).
  4. Активність проксі-коду onStart () викликає закінчення ().
  5. Всередині OnStart () та onNewIntent () перевірки стану перевірки стану моделі та завершення виклику (), якщо він "Вийшов" (а також у моєму випадку також викликайте stopService ()).

Я сподіваюся, що це комусь допоможе, тому що я не знайшов відповіді в Інтернеті.


Я вважаю це найбільш точною відповіддю, оскільки "очищення наміру" не обов'язково означає "видалити певну зайву". Я також не думаю, що існує простий спосіб зробити це.
mdelolmo

5

Переконайтеся , що ви використовуєте PendingIntent.FLAG_UPDATE_CURRENT прапор PendingIntent .

PendingIntent pendingIntent = PendingIntent.getActivity(this, 100, mPutIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Де mPutIntentтвій Intent.

Сподіваюся, що це вам допоможе.


1
врятувало мені життя !!
eren130

1
Я не розумію, як це не прийнята відповідь. Моє єдине жалювання є лише одне: мати єдиний внесок. Ура.
Енді

2

Нещодавно у мене була ця проблема, і я вирішив її, додавши часову позначку як додатковий параметр до наміру:

private void launchActivity(Context context) {
    Intent intent = new Intent(context, MainActivity.class);
    intent.putExtra("KEY_EXTRA_TIMESTAMP", System.currentTimeMillis());
    context.startActivity(intent);
}

Після цього збережіть позначку часу у спільних налаштуваннях:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    long time = getIntent().getLongExtra("KEY_EXTRA_TIMESTAMP", -1);
    long previousTime = getPreferences(MODE_PRIVATE).getLong("timestamp", -1);

    //ignore if the timestamp is the same as the previous one  
    if (time != previousTime) {
        handleIntent(getIntent());
        if (time != -1) {
            //save the timestamp
            getPreferences(MODE_PRIVATE).edit().putLong("timestamp", time).apply();
        }
    }
}

1

У мене точно така ж проблема. Моє рішення полягала в тому, щоб додати booleanзмінну, яка була встановлена, коли вона Intentбула "використана", і ifвиходячи з цього, booleanщоб перевірити, чи слід використовувати ви її Intent.


3
це може не спрацювати, оскільки булеві значення будуть відтворені (якщо вони будуть оголошені глобальними в активі), коли діяльність припиняється і потім перезапускається. (натиснувши кнопку "Додому", наприклад)
tony9099

1

Коли ви закінчите обробку наміру, зробіть це:

setIntent(null);

Ви більше не побачите цей оброблений намір, і ви не будете маскувати проблему, редагуючи вміст обробленого наміру.


1

Не вдалося знайти спосіб видалити Intent Extra . Жоден відповідь про видалення зайвих з намірів не працює, якщо ви ввімкнули "Не тримати діяльність " з "Параметри розробника" (таким чином ви можете знищити Діяльність і повернутися до перевірки, чи є додаткові додатки ще).

Як рішення проблеми, я зберігав булеве значення в SharedPreferences після обробки намірених додаткових даних. Коли той самий Намір буде відновлено до Діяльності, я перевіряю значення SharedPreference і вирішую обробити додатковий намір. Якщо ви надішліть інший новий додатковий намір для тієї самої діяльності, ви зробите значення SharedPreference неправдивим, і Activity обробить його. Приклад :

// Start Activity with Intent Extras
Intent intent = new Intent(context, MyActivity.class);
intent.putExtra("someData", "my Data");
// Set data as not processed
context.getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE).edit().putBoolean("myActivityExtraProccessed", false).commit();
context.startActivity(intent);

...

public class MyActivity{

    ...
    public void someMethod(){
        boolean isExtrasProcessed = context.getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE).getBoolean("myActivityExtraProccessed", false);  
         if (!isExtrasProcessed) {
              // Use Extras

              //Set data as processed
              context.getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE).edit().putBoolean("myActivityExtraProccessed", true).commit();
         }
    }

}

вподобання не має сенсу, оскільки ви не знаєте, чи розпочали ви діяльність за допомогою startActivity або повторно відкриєте її з History Stack ...
user25

@ user25 Я думаю, що був спосіб визначити, чи він запущений із останніх додатків. Але чи не має значення, додатковий намір споживається чи ні, якщо він споживається, знайте про це із спільного приводу. я використовував це для додаткового сповіщення про push, і це не має значення, як відкривається діяльність для мого випадку.
Джемшит Іскендеров

0

Навіть після очищення додатків «Намір» і «Намір» після їх розбору, здається, що Activity.getIntent () завжди поверне початковий Намір, який запустив Діяльність.

Щоб обійти це, я рекомендую щось подібне:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // The Intent provided by getIntent() (and its extras) will persist through a restore
    // via savedInstance.  Because of this, restoring this activity from a
    // an instance that was originally started with extras (deep-link or 
    // pre-defined destination) may cause un-desired behavior
    // (ie...infinite loop of sending the user directly to somewhere else because of a
    // pre-defined alternate destination in the Intent's extras).
    //
    // To get around this, if restoring from savedInstanceState, we explicitly
    // set a new Intent *** to override the original Intent that started the activity.***
    // Note...it is still possible to re-use the original Intent values...simply
    // set them in the savedInstanceState Bundle in onSavedInstanceState.
    if (savedInstanceState != null) {
        // Place savedInstanceState Bundle as the Intent "extras"
        setIntent(new Intent().putExtras(savedInstanceState));
    }

    processIntent(getIntent())
}

private void processIntent(Intent intent) {
    if (getIntent().getExtras() == null) {
        // Protection condition
        return;
    }

    doSomething(intent.getExtras.getString("SOMETHING_I_REALLY_NEED_TO_PERSIST"));

    final String somethingIDontWantToPersist = 
        intent.getExtras.getString("SOMETHING_I_DONT_WANT_TO_PERSIST");

    if(somethingIDontWantToPersist != null) {
        doSomething(somethingIDontWantToPersist);
    }
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save selective extras from original Intent...
    savedInstanceState.putString("SOMETHING_I_REALLY_NEED_TO_PERSIST", "persistedValued");
    super.onSaveInstanceState(savedInstanceState);
}

Таким чином, існує механізм скидання вихідного Наміру, зберігаючи також можливість явного збереження певних частин початкових додатків "Намір / Намір".

Зауважте, що я не перевірив усіх режимів запуску діяльності.


0

Прямий шлях - уникнути виклику getIntent () з інших методів, ніж onCreate (). Але це спричинить проблеми під час наступного запуску, якщо користувач залишив нашу діяльність, натиснувши кнопку «Головна». Я думаю, що ця проблема не має повністю функціонального рішення.


0

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

Я думаю, що це може бути причиною режиму запуску acitvity, який я використовував режим SingleTop.

Коли я фоновий додаток і використовую RamEater для імітації проблеми, яка має намір завжди додатково, навіть я встановив її як нуль або видалити ключ.

Проблема усувається, використовуючи переважне сховище на Android, щоб перевірити, що пройшло.


0

Недобра практика додавати ще одну зайву, просто знати, чи були вжиті додаткові послуги чи ні, чому б це не зробити ?:

if (intent.hasExtra(EXTRA_NAME) && intent.getBooleanExtra(EXTRA_NAME, false)) {
    // consume extra here after that set it to false
    putExtra(EXTRA_NAME, false)
}   

-1

Як щодо цього? Встановлює newIntent як намір.

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
}

1
Я не думаю, що це працює. Коли діяльність відтворена з історії, наміри залишаються незмінними.
mdelolmo

-1

Як щодо того, коли ви хочете очистити наміри - замініть його порожнім?

напр.

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
}

@Override 
public void onResume() {
    super.onResume();

    Intent theIntent = getIntent();
    if ("myaction".equals(theIntent.getAction()) {
         handleIntent();
         onNewIntent(new Intent());  // <--- "clear" the intent by setting empty one
    }
}

-1

Це, сподіваємось, допоможе всім. Отже спочатку ми отримуємо наміри

//globally
Intent myIntent;

Помістіть це десь наСтворення

myIntent = getIntent();
String data = myIntent.getStringExtra("yourdata");
//Your process here

Тепер давайте встановимо це так, щоразу, коли наша програма буде знищена чи закрита, ми будемо видаляти дані

@Override
protected void onDestroy() {
    //TODO: Clear intents
    super.onDestroy();
    myIntent.removeExtra("data");
}
@Override
protected void onBackPressed() {
    //TODO: Clear intents
    super.onBackPressed();
    myIntent.removeExtra("data");
}

Ви отримуєте ідею, якщо цього недостатньо, просто знайдіть більше зворотних зворотів


Намір видаляється лише після виходу із програми, наприклад, Розмикання вступів.
Pixeldroid Modding

-2

Хоча заголовокIntent.removeExtra("key") видалить один конкретний ключ із додаткових даних, існує також метод Intent.replaceExtras (Bundle) , який може бути використаний для видалення цілих додаткових даних з Намір, якщо nullвін переданий як параметр.

З документів:

Повна заміна додатків у Намірі на даний пакет пакетів.

Параметри
додатків Новий набір додатків у Намір або нульовий, щоб стерти всі додаткові елементи.

Оскільки методи putXXX () ініціалізують додаткових даних зі свіжим Bundle, якщо він є нульовим, це не проблема.


-3
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addCategory(Intent.CATEGORY_HOME);  
startActivity(intent);

2
Вам слід розглянути детальну інформацію про те, що ви робите, і як це відповідає на питання ОП.
forsvarir

1
@Ramkumar це відводить користувача додому. Ясно, що це лише один випадок із 10000 випадків, які можуть викликати виклик Паузи, OnStop або OnDestroy.
tony9099

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