Fragment onActivityResult提前響應,startActivityForResult執行後立即響應onActivityResult的解決方法
阿新 • • 發佈:2018-11-29
找不到病根真是讓人愁白了頭;
今天寫了一個startActivityForResult,開啟一個Activity並拿到返回的結果,但是startActivityForResult剛走,onActivityResult就立即響應了,這我要這個onActivityResult有何用;
來看開啟程式碼:
Intent intaentPermission = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); intaentPermission.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intaentPermission.setData(Uri.parse( "package:"+getPackageName())); startActivityForResult(intaentPermission,windowHintStartPermission);
這個是回撥程式碼:
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == windowHintStartPermission){ if (Build.VERSION.SDK_INT >= 23) { if (!Settings.canDrawOverlays(getActivity())) { UIHelper.showToast("您未開啟懸浮窗許可權,遙控正在後臺執行"); }else { Intent intent = new Intent(getActivity(), TelecontrolQueryService.class); intent.putExtra("id", ""); getActivity().startService(intent); } }else { Intent intent = new Intent(getActivity(), TelecontrolQueryService.class); intent.putExtra("id",""); getActivity().startService(intent); } } }
我真是日了狗了,開啟程式碼剛執行結束,回撥程式碼就走了;
來、劃重點了:
經排查,發現這個提前回調跟Activity的啟動模式有關(launchMode),舉個栗子:Activity1使用startActivityForResult開啟Activity2,Activity2的launchMode如果不是標準模式,就會出現提前回調的問題,onActivityResult立即執行;
我的解決方法:
Intent intaentPermission = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); // intaentPermission.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //把啟動模式註釋掉 intaentPermission.setData(Uri.parse( "package:"+getPackageName())); startActivityForResult(intaentPermission,windowHintStartPermission);
還有就是,不要getActivity().startActivityForResult();在Fragment中開啟Activity前面不要加getActivity(). ;不然你的onActivityResult方法會不執行;