/// <summary> /// 启动默认的app /// </summary> /// <param name="startParams">启动参数</param> public void StartDefaultApp(XStartParams startParams) { XWebApplication defaultApp = (XWebApplication)this.GetAppList().GetAppById(GetDefaultAppId()); if (defaultApp == null) { XToastPrompt.GetInstance().Toast(xFaceLibResources.Start_DefaultApp_Error); return; } defaultApp.IsDefaultApp = true; //TODO 注册AMS 扩展 var amsExt = WPCordovaClassLib.Cordova.CommandFactory.CreateByServiceName("AMS"); if (amsExt != null) { amsExt.InvokeMethodNamed("init", this); } ; if (AMS_ERROR.ERROR_BASE != StartApp(defaultApp.AppInfo.AppId, startParams)) { XToastPrompt.GetInstance().Toast(xFaceLibResources.Start_DefaultApp_Error); } }
/// <summary> /// 启动app应用 /// </summary> /// <param name="appId">应用id</param> /// <param name="appparams">应用参数</param> /// <returns>启动应用的错误码</returns> public AMS_ERROR StartApp(String appId, XStartParams appparams) { XApplication app = this.GetAppList().GetAppById(appId); if (null == app) { XLog.WriteError("failed to startapp! can't find app by id:" + appId); return AMS_ERROR.APP_NOT_FOUND; } if (!IsValidAppEntry(app.AppInfo.Entry)) { XLog.WriteError("failed to startapp! app entry can't be NullOrEmpty by id:" + appId); return AMS_ERROR.APP_ENTRY_ERR; } String startData = null; if (null != appparams) { startData = appparams.Data; } //TODO: 对于active app是否应该bringtoTop if (app is XNativeApplication) { //FIXME: 对于启动nativeApp 成功与否系统会做出提示 app.Load(); } else { if (!app.IsActive()) { activeApps.Add(app); //注册close 和 sendMessage的event监听 EventHandler<string> AppCloseHandler = delegate(object o, string id) { CloseApp(id); }; ((XWebApplication)app).AppClose += AppCloseHandler; EventHandler<string> AppSendMsgHandler = delegate(object o, string id) { HandleAppEvent((XApplication)o, kAppEventMessage, id); }; ((XWebApplication)app).AppSendMessage += AppSendMsgHandler; String pageEntry = null; if (null != appparams) { pageEntry = appparams.PageEntry; } if (pageEntry != null && pageEntry != string.Empty) { app.AppInfo.Entry = pageEntry; if (IsValidAppEntry(app.AppInfo.Entry)) { XLog.WriteError("failed to startapp! app entry can't be NullOrEmpty by id:" + appId); return AMS_ERROR.APP_ENTRY_ERR; } } if (startData != null) { ((XWebApplication)app).SetData(XConstant.TAG_APP_START_PARAMS, startData); } this.amsDelegate.StartApp((XWebApplication)app); } else { XLog.WriteError("failed to startapp! app already running by id:" + appId); return AMS_ERROR.APP_ALREADY_RUNNING; } } //没错误 return AMS_ERROR.ERROR_BASE; }