簡體   English   中英

從通知中打開活動

[英]Opening an activity from a notification

我有一個名為“ A”的活動,帶有兩個按鈕。 每個按鈕打開其他新活動“ B”和“ C”,活動“ A”處於onPause狀態。 活動“ C”有一個包含3頁的viewpager

該應用程序可以接收通知。

單擊收到的通知,打開活動“ C”。

這可以通過以下方式正常運行:

//...
    NotificationManager notificationManager =(NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); 
...
Intent intent =new Intent(getApplicationContext(), activityC.class);
        intent.putExtra("hello", notificationData);

這是我的問題:

我希望當您單擊收到的通知時,如果我的應用程序顯示活動“ A”或“ B”,或者該應用程序處於后台,請關閉並打開活動“ C”

如果應用程序顯示活動“ C”,則指向頁面的ViewPager( pager.setCurrentItem (2);

我讀了幾天的書,嘗試了幾種方法,使用android:launchMode="singleTop"定義android:launchMode="singleTop" FLAG_ACTIVITY_NEW_TASK, FLAG_ACTIVITY_CLEAR_TOP and FLAG_ACTIVITY_SINGLE_TOP ...但始終沒有成功

我為此而發瘋...

有人可以幫我嗎?

提前致謝!

單擊通知后,廣播將發送給您的活動A,然后A將啟動您的活動C,而不是從C啟動活動。

您可以嘗試為活動C設置FLAG_ACTIVITY_SINGLE_TOP,這樣,如果C已經在最上面,它將收到該意圖。

您需要做的就是定義最后的位置。 這是我將如何處理:

創建一個類並從Application類擴展它

在這里定義一個變量,可以是boolean,enum,int等,當您輸入任何這些活動時,請更改該參數。

在每個活動的OnDestroy中,將該特定變量重置為其默認值。

在進行意圖之前,在服務中,請檢查您最終處於哪個狀態,並根據此意圖進行意圖。

public class MY_APPLCIATION extends Application {
    public static Boolean ActivityAIsRunning=false;
    public static Boolean ActivityBIsRunning=false;
}

覆蓋兩個活動的onResume和onDestroy:

public class ActivityA extends AppCompatActivity {
    // ......
    @Override
    protected void onDestroy() {
        super.onDestroy();
        MY_APPLCIATION.ActivityAIsRunning=false;
    }

    @Override
    protected void onResume() {
        super.onResume();
        MY_APPLCIATION.ActivityAIsRunning=true;
    }
}

活動B:

public class ActivityB extends AppCompatActivity {
    // ......
    @Override
    protected void onDestroy() {
        super.onDestroy();
        MY_APPLCIATION.ActivityBIsRunning=false;
    }

    @Override
    protected void onResume() {
        super.onResume();
        MY_APPLCIATION.ActivityBIsRunning=true;
    }
}

現在有一個重要的注意事項,您應該注意:

創建通知時,應定義意圖!

您應該進行另一項活動(我們將其稱為MY_NOTIFICATION_ACTIVITY)。 並且通知應始終轉到該活動。 現在在該活動中檢查設置了哪個布爾值,然后調用所需的活動(ActivityA或ActivityB或ActivityC)。 不要忘記,在清單中也應該使ActivityB為singleTop !!!

***另一種簡單的方法

另一個簡單的方法是您在OnResume中更新每個活動的通知。 通過輸入每個活動,您可以將意圖更改為所需的活動,並發出相同的通知並更新上一個通知。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM