亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通知恢復任務而不是特定活動?

通知恢復任務而不是特定活動?

手掌心 2019-11-14 15:30:49
我有一個前臺服務,只要用戶登錄到應用程序,它就可以保持與服務器的連接打開。這樣,即使用戶通過按Home鍵將應用程序發送到后臺,連接也可以保持活動狀態并可以直接從服務器接收消息。該應用程序具有許多活動,當將其發送到后臺時,其中任何一個都可能是活動的。我想允許用戶單擊通知以還原當前的活動。我知道如何還原特定的活動,但想知道是否有一種方法可以還原用戶所在的上一個活動?當然,我可以跟蹤最后一個,然后從Notification回調中調用它,但是認為在任務級別可能有辦法嗎?感謝您提供的任何建議。android android-activity
查看完整描述

3 回答

?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

您需要的只是一個簡單的活動,什么也不做。這是一個例子:


public class NotificationActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // Now finish, which will drop the user in to the activity that was at the top

        //  of the task stack

        finish();

    }

}

設置您的通知以開始此活動。確保清單中此活動的任務親和力與應用程序中其他活動的任務親和力相同(默認情況下,如果您未顯式設置android:taskAffinity,則為)。


當用戶選擇此通知時,如果您的應用程序正在運行,則NotificationActivity將在應用程序任務中最頂層活動的頂部啟動,并且該任務將被置于前臺。當NotificationActivity完成時,它將簡單地使用戶返回到應用程序中最頂層的活動(即,當用戶進入后臺時將其停留在的任何位置)。


如果您的應用程序尚未運行,則此方法將無效。但是,您可以通過以下兩種方法解決此問題:


當您的應用程序未運行時,請確保該通知未出現在通知欄中。


在NotificationActivity的onCreate()方法中,檢查您的應用程序是否正在運行,以及是否未運行,請調用startActivity()并啟動您的應用程序。如果這樣做,請確保在啟動應用程序時設置標志Intent.FLAG_ACTIVITY_NEW_TASK,以便該任務的根活動不是NotificationActivity。


查看完整回答
反對 回復 2019-11-14
?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

效果很好,謝謝大衛!以下類檢查應用程序是否已在運行,如果尚未運行,則在完成之前啟動它(如David在選項2中所建議的)。


public class NotificationActivity extends Activity 

{

    @Override

    protected void onCreate(Bundle savedInstanceState) 

    {

        super.onCreate(savedInstanceState);


        // If this activity is the root activity of the task, the app is not running

        if (isTaskRoot())

        {

            // Start the app before finishing

            Intent startAppIntent = new Intent(getApplicationContext(), MainActivity.class);

            startAppIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            startActivity(startAppIntent);

        }


        finish();

    }

}


查看完整回答
反對 回復 2019-11-14
?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

Intent intent = new Intent(Intent.ACTION_MAIN);

intent.addCategory(Intent.CATEGORY_LAUNCHER);

毫無疑問,這可行,但是問題是當您將意圖設置為ACTION_MAIN時。這樣,您將無法將任何捆綁軟件設置為該意圖。我的意思是,由于ACTION_MAIN不能包含任何額外的數據,因此不會從目標活動中接收您的原始數據。


取而代之的是,您可以將活動設置為singleTask并正常調用意圖,而無需設置ACTION_MAIN并從目標活動的onNewIntent()方法接收意圖。


但是請注意,如果您調用super.onNewIntent(intent); 然后將創建該活動的第二個實例。只是不要調用超級方法。


查看完整回答
反對 回復 2019-11-14
  • 3 回答
  • 0 關注
  • 468 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號