Flutter提示:獲取權(quán)限的Activity不存在
我的主項(xiàng)目是Flutter項(xiàng)目,里面需要跳轉(zhuǎn)到原生頁(yè)面霎挟,通過(guò)FlutterBoost跳轉(zhuǎn)
然后從原生頁(yè)面又跳轉(zhuǎn)到一個(gè)新的Flutter頁(yè)面柬焕,
再返回到最初的頁(yè)面审残,表面上看不出什么問(wèn)題,但是每次使用Activity的時(shí)候斑举,比如我項(xiàng)目里使用了photo_manager和url_launcher搅轿,每次使用到這兩個(gè)庫(kù)的時(shí)候,會(huì)報(bào)Activity不存在富玷,null璧坟。通過(guò)看源碼既穆,發(fā)現(xiàn)每次進(jìn)入BoostFlutterActivity后,都會(huì)走
這個(gè)方法雀鹃,然后會(huì)走這里
先置空再賦值
這是Activity是BoostFlutterActivity幻工,一切也都沒(méi)問(wèn)題,然后當(dāng)我關(guān)閉這個(gè)BoostFlutterActivity黎茎,會(huì)執(zhí)行detachFromActivity()方法囊颅,會(huì)將綁定的Activity置空,這時(shí)和Activity相關(guān)的邏輯都不能用了傅瞻,比如使用權(quán)限庫(kù)的時(shí)候會(huì)報(bào)這個(gè)錯(cuò):獲取權(quán)限的Activity不存在
后來(lái)看了下flutter-boost的issue踢代,里面有一條解決了這個(gè)問(wèn)題https://github.com/alibaba/flutter_boost/issues/970。這個(gè)問(wèn)題會(huì)在flutter-boost v1.22.4-hotfixes出現(xiàn)俭正,模仿v1.17.1分支寫就可以了奸鬓,下面是我把flutter-boost代碼拉到本地,然后修改的代碼掸读,在FlutterActivityAndFragmentDelegate類里面
新增了紅色框中的就可以了串远。
'''
public void onResume() {
if(mSyncer.isLocked())return;
? ? mSyncer.onAppear();
? ? Log.v(TAG, "onResume()");
? ? ensureAlive();
? ? flutterEngine.getLifecycleChannel().appIsResumed();
? ? if(ACTIVITY_CONTROL_SURFACE_ATTACH_TO_ACTVITY_HASH_CODE==0||
ACTIVITY_CONTROL_SURFACE_ATTACH_TO_ACTVITY_HASH_CODE!=this.host.getActivity().hashCode()){
flutterEngine.getActivityControlSurface().detachFromActivityForConfigChanges();
? ? ? ? flutterEngine.getActivityControlSurface().attachToActivity(
host.getActivity(),
? ? ? ? ? ? ? ? host.getLifecycle()
);
? ? ? ? ACTIVITY_CONTROL_SURFACE_ATTACH_TO_ACTVITY_HASH_CODE=this.host.getActivity().hashCode();
? ? }
}
'''
'''
public void onResume() {
if(mSyncer.isLocked())return;
? ? mSyncer.onAppear();
? ? Log.v(TAG, "onResume()");
? ? ensureAlive();
? ? flutterEngine.getLifecycleChannel().appIsResumed();
? ? if(ACTIVITY_CONTROL_SURFACE_ATTACH_TO_ACTVITY_HASH_CODE==0||
ACTIVITY_CONTROL_SURFACE_ATTACH_TO_ACTVITY_HASH_CODE!=this.host.getActivity().hashCode()){
flutterEngine.getActivityControlSurface().detachFromActivityForConfigChanges();
? ? ? ? flutterEngine.getActivityControlSurface().attachToActivity(
host.getActivity(),
? ? ? ? ? ? ? ? host.getLifecycle()
);
? ? ? ? ACTIVITY_CONTROL_SURFACE_ATTACH_TO_ACTVITY_HASH_CODE=this.host.getActivity().hashCode();
? ? }
}
'''