我有一個應用程序啓動時使用登錄活動,該活動將用戶重定向到瀏覽器以便向服務進行身份驗證(必須通過瀏覽器進行身份驗證不使用REST API或curl),然後使用會話ID跳轉回應用程序。從應用程序到瀏覽器會是容易的,我只是啓動它,像這樣:通過意向過濾器從瀏覽器切換到應用程序時的Android問題
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://domain.com/login/?url=appscheme://loggedin&sessionTransfer=window"));
startActivity(intent);
一旦用戶登錄,瀏覽器應該通過一個意圖跳回應用(與會話ID)過濾目標活動,使用android.intent.category.BROWSABLE聲明。
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="loggedin"
android:scheme="appscheme" />
</intent-filter>
的問題是,代替了原來的應用實例下恢復執行,它出現在瀏覽器實例下初始登錄屏幕後執行的一切。這有幾個原因是不好的。首先,這意味着Recent Apps菜單顯示了用戶在瀏覽器中所做的一切,主應用程序只顯示登錄按鈕。其次,無論何時關閉應用程序並打開瀏覽器,瀏覽器都會重新打開現有選項卡中的應用程序。
如何使用瀏覽器,然後確保當用戶通過瀏覽器完成登錄時,所有活動都會在原始應用程序實例下恢復?
編輯:萬一這有助於提高清晰度,這是預期的流程,包括每項活動應該如何在最近訪問的應用列表中列出: MyActivity1(與MyApp的關聯) - >瀏覽器 - (與MyApp的關聯)
這裏>MyActivity2是實際發生的事情: (與MyApp的關聯) MyActivity1 - >瀏覽器 - >MyActivity2(與瀏覽器相關聯)
所以現在,如果用戶想要查看一封電子郵件,然後回到我的應用程序,他們實際上必須從最近的應用程序中選擇瀏覽器才能工作。
看看這有助於http://stackoverflow.com/questions/151777/saving-activity-state-in-android – CoderP
這不是我的問題正是相關。預期的流程是:MyApp從MyActivity1開始。它來自MyActivity1 - >瀏覽器 - > MyActivity2。現在,它到達MyActivity2,但由於某種原因,一旦它到達那裏,MyActivity2將與瀏覽器關聯,而不是與MyApp關聯。所有功能都很好,但是哪個活動的層次結構屬於完全搞砸了的東西。 –