997 public void sendOrderedBroadcast(Intent intent,
998 String receiverPermission, BroadcastReceiver resultReceiver,
999 Handler scheduler, int initialCode, String initialData,
1000 Bundle initialExtras) {
1001 IIntentReceiver rd = null;
1002 if (resultReceiver != null) {
1003 if (mPackageInfo != null) {
1004 if (scheduler == null) {
1005 scheduler = mMainThread.getHandler();
1006 }
1007 rd = mPackageInfo.getReceiverDispatcher( <===========
1008 resultReceiver, getOuterContext(), scheduler,
1009 mMainThread.getInstrumentation(), false);
1010 } else {
1011 if (scheduler == null) {
1012 scheduler = mMainThread.getHandler();
1013 }
1014 rd = new LoadedApk.ReceiverDispatcher(
1015 resultReceiver, getOuterContext(), scheduler, null, false).getIIntentReceiver();
1016 }
1017 }
1018 String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
1019 try {
1020 intent.setAllowFds(false);
1021 ActivityManagerNative.getDefault().broadcastIntent(
1022 mMainThread.getApplicationThread(), intent, resolvedType, rd,
1023 initialCode, initialData, initialExtras, receiverPermission,
1024 true, false, Binder.getOrigCallingUser());
1025 } catch (RemoteException e) {
1026 }
1027 }
1043 public void sendStickyOrderedBroadcast(Intent intent,
1044 BroadcastReceiver resultReceiver,
1045 Handler scheduler, int initialCode, String initialData,
1046 Bundle initialExtras) {
1047 IIntentReceiver rd = null;
1048 if (resultReceiver != null) {
1049 if (mPackageInfo != null) {
1050 if (scheduler == null) {
1051 scheduler = mMainThread.getHandler();
1052 }
1053 rd = mPackageInfo.getReceiverDispatcher( <===========
1054 resultReceiver, getOuterContext(), scheduler,
1055 mMainThread.getInstrumentation(), false);
1056 } else {
1057 if (scheduler == null) {
1058 scheduler = mMainThread.getHandler();
1059 }
1060 rd = new LoadedApk.ReceiverDispatcher(
1061 resultReceiver, getOuterContext(), scheduler, null, false).getIIntentReceiver();
1062 }
1063 }
1064 String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
1065 try {
1066 intent.setAllowFds(false);
1067 ActivityManagerNative.getDefault().broadcastIntent(
1068 mMainThread.getApplicationThread(), intent, resolvedType, rd,
1069 initialCode, initialData, initialExtras, null,
1070 true, true, Binder.getOrigCallingUser());
1071 } catch (RemoteException e) {
1072 }
1073 }
1102 private Intent registerReceiverInternal(BroadcastReceiver receiver,
1103 IntentFilter filter, String broadcastPermission,
1104 Handler scheduler, Context context) {
1105 IIntentReceiver rd = null;
1106 if (receiver != null) {
1107 if (mPackageInfo != null && context != null) {
1108 if (scheduler == null) {
1109 scheduler = mMainThread.getHandler();
1110 }
1111 rd = mPackageInfo.getReceiverDispatcher( <=====
1112 receiver, context, scheduler,
1113 mMainThread.getInstrumentation(), true);
1114 } else {
1115 if (scheduler == null) {
1116 scheduler = mMainThread.getHandler();
1117 }
1118 rd = new LoadedApk.ReceiverDispatcher(
1119 receiver, context, scheduler, null, true).getIIntentReceiver();
1120 }
1121 }
1122 try {
1123 return ActivityManagerNative.getDefault().registerReceiver(
1124 mMainThread.getApplicationThread(), mBasePackageName,
1125 rd, filter, broadcastPermission);
1126 } catch (RemoteException e) {
1127 return null;
1128 }
1129 }
580 public IIntentReceiver getReceiverDispatcher(BroadcastReceiver r,
581 Context context, Handler handler,
582 Instrumentation instrumentation, boolean registered) {
583 synchronized (mReceivers) {
584 LoadedApk.ReceiverDispatcher rd = null;
585 HashMap<BroadcastReceiver, LoadedApk.ReceiverDispatcher> map = null;
586 if (registered) {
587 map = mReceivers.get(context);
588 if (map != null) {
589 rd = map.get(r);
590 }
591 }
592 if (rd == null) {
593 rd = new ReceiverDispatcher(r, context, handler, <===
594 instrumentation, registered);
595 if (registered) {
596 if (map == null) {
597 map = new HashMap<BroadcastReceiver, LoadedApk.ReceiverDispatcher>();
598 mReceivers.put(context, map);
599 }
600 map.put(r, rd);
601 }
602 } else {
603 rd.validate(context, handler);
604 }
605 rd.mForgotten = false;
606 return rd.getIIntentReceiver();
607 }
608 }
778 ReceiverDispatcher(BroadcastReceiver receiver, Context context,
779 Handler activityThread, Instrumentation instrumentation,
780 boolean registered) {
781 if (activityThread == null) {
782 throw new NullPointerException("Handler must not be null");
783 }
784
785 mIIntentReceiver = new InnerReceiver(this, !registered);
786 mReceiver = receiver;
787 mContext = context;
788 mActivityThread = activityThread;
789 mInstrumentation = instrumentation; <======
790 mRegistered = registered;
791 mLocation = new IntentReceiverLeaked(null);
792 mLocation.fillInStackTrace();
793 }