最近升級專案成為 api 28 以因應 google 的政策
但升版之後在 notification 要開啟目標 Activity 的時候遇上了這個 Exception
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
意思是因為我們從 Activity 之外,用了 context.startActivity()
所以要加上 FLAG_ACTIVITY_NEW_TASK 這個 Flag 才能正常啟動
其實這個在 7.0(API 24)之前就有提出來了
若需要通過非 Activity context 啟動 Activity
就必須設置 Intent 標誌 FLAG_ACTIVITY_NEW_TASK
但 Android 7.0 以後由於系統問題被取消了,即使不設置標誌也可以正常啟動 Activity
而 Android 9.0 中官方修復了這個問題,並且強制要求必需加此 Flag
那為什麼要加這一個 Flag 呢?
因為 Activity 需要存在於 Activity 棧中
而非 Activity 啟動 Activity 時一定不存在一個 Activity 的棧
所以要新建一個 Activity 棧來存放要啟動的 Activity 喔
最後修改如下,即決解此問題
Intent intent = new Intent(this, IncomingCallActivity.class);
intent.addFlags(
Intent.FLAG_ACTIVITY_SINGLE_TOP
| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
留言列表