close

最近升級專案成為 api 28 以因應 google 的政策

詳情可看這 Android 請將最低目標 API 等級調整為 28,google 強制更新政策,介紹 compileSdkVersion,minSdkVersion,targetSdkVersion』Willy's Fish教學筆記

但升版之後在 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);

 

 

 


arrow
arrow
    創作者介紹
    創作者 顏澤偉 的頭像
    顏澤偉

    Willy's Fish教學筆記』

    顏澤偉 發表在 痞客邦 留言(0) 人氣()