存在运营商需求:当SIM卡设置中选择了自动搜网,那么在重启开机后要执行一次手动搜网。
若基于本身单卡的实现,只搜索卡槽0的,而且写成了单线程,那么就在适配双卡的过程中还需要调整设计模式。
packages/apps/Settings/src/com/android/settings/network/ 界面
packages/services/Telephony/src/com/android/phone/PhoneInterfaceManager.java 业务逻辑
- /**
- * A handler that processes messages on the main thread in the phone process. Since many
- * of the Phone calls are not thread safe this is needed to shuttle the requests from the
- * inbound binder threads to the main thread in the phone process. The Binder thread
- * may provide a {@link MainThreadRequest} object in the msg.obj field that they are waiting
- * on, which will be notified when the operation completes and will contain the result of the
- * request.
- *
- *
If a MainThreadRequest object is provided in the msg.obj field,
- * note that request.result must be set to something non-null for the calling thread to
- * unblock.
- */
- private final class MainThreadHandler extends Handler {
- @Override
- public void handleMessage(Message msg) {
- MainThreadRequest request;
- Message onCompleted;
- AsyncResult ar;
- UiccPort uiccPort;
- IccAPDUArgument iccArgument;
- final Phone defaultPhone = getDefaultPhone();
-
- switch (msg.what) {
- case EVENT_GET_NETWORK_SELECTION_MODE_DONE:
- //obj参数保存了一个AsyncResult对象
- ar = (AsyncResult) msg.obj;
- //userObj参数保存了一个MainThreadRequest对象
- request = (MainThreadRequest) ar.userObj;
- if (ar.exception != null) { //异步请求异常,设置结果unknown
- request.result = TelephonyManager.NETWORK_SELECTION_MODE_UNKNOWN;
- } else { //根据异步请求结果设置网络选择模式
- int mode = ((int[]) ar.result)[0];
- if (mode == 0) { //mode0自动搜网
- request.result = TelephonyManager.NETWORK_SELECTION_MODE_AUTO;
- } else { //mode1手动搜网
- request.result = TelephonyManager.NETWORK_SELECTION_MODE_MANUAL;
- }
- }
- notifyRequester(request); //通知请求异步操作的结果
- break;
- default:
- Lo