[英]How to handle onActivityResult() with Mortar
我希望將應用程序與Google Play服務和Mortar集成,以檢索用戶的當前位置。
https://developer.android.com/training/location/retrieve-current.html#CheckServices
這需要在Google Play服務不可用的情況下處理onActivityResult()。
我對如何做到這一點的第一直覺是讓Main.java
getFirstScreen()
返回一個空白加載屏幕。 https://github.com/square/mortar/blob/master/mortar-sample/src/main/java/com/example/mortar/core/Main.java
注入后,在onCreate()
期間執行檢查以查看Google Play服務是否可用。 如果是,則調用flow.goTo(<location using screen>)
,如果沒有,則不執行任何操作並等待onActivityResult()
被調用。 然后,當onActivityResult()
觸發時,只需調用flow.goTo(<location using screen>)
。
以上看起來對我來說有些苛刻。 (如果您需要澄清,請告訴我)。 所以我認為另一個解決方案可能是做一些類似於這個Mortar + Flow的東西,第三方庫掛鈎到活動生命周期,並將onActivityResult()
連接到演示者。 這樣做的問題是我無法從演示者訪問Activity
,這使得無法調用GooglePlayServicesUtil.getErrorDialog(...)
因為它需要Activity
。
我認為onActivityResult()
非常重要。 也許它應該是Mortar庫的一部分?
以下是我們如何處理Square Register中的startActivityForResult。
public SomePresenter extends Presenter<SomePresenter.Activity> {
public interface Activity {
void startActivityForResult(android.content.Intent intent, int requestCode);
}
public final void onActivityResult(int requestCode, int resultCode, Intent data) {
// Make sure it's the expected requestCode and resultCode and do your thing.
// If it isn't, no-op, someone else will handle it.
}
}
活動看起來像:
public MyActivity extends Activity implements SomePresenter.Activity {
@Override protected void onCreate(Bundle bundle) {
// Do the usual mortar init stuff
somePresenter.takeView(this);
}
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
somePresenter.onActivityResult(requestCode, resultCode, data);
}
@Override protected void onDestroy() {
somePresenter.dropView(this);
super.onDestroy();
}
}
這對錯誤對話框沒有幫助,但這對我來說聽起來像是一個單獨的問題。 好像你可以在那里使用Popup / PopupPresenter對。 (我對Popup並不感到興奮,但是在我們有了更好的想法之前它就完成了工作。)或者也許活動應該繼續並自己處理它? 我對Play服務並不是很熟悉,還沒有處理過它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.