[英]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.