smmmanager.java
来自「This is a resource based on j2me embedde」· Java 代码 · 共 430 行
JAVA
430 行
/* * * * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */package com.sun.midp.appmanager;import javax.microedition.midlet.*;import javax.microedition.lcdui.*;import com.sun.midp.i18n.Resource;import com.sun.midp.i18n.ResourceConstants;import com.sun.cldc.isolate.*;import com.sun.midp.midlet.*;import com.sun.midp.installer.*;import com.sun.midp.midletsuite.*;import com.sun.midp.main.*;import com.sun.midp.io.j2me.push.*;import com.sun.midp.configurator.Constants;/** * This is an implementation of the ApplicationManager interface * for the MVM mode of the VM running with only one midlet at time. * * Application manager controls midlet life cycle: * - installs, updates and removes midlets/midlet suites * - launches and terminates midlets * - displays info about a midlet/midlet suite * - shuts down the AMS system */public class SMMManager extends MIDlet implements MIDletProxyListListener, Runnable, ApplicationManager { /** Constant for the discovery application class name. */ private static final String DISCOVERY_APP = "com.sun.midp.installer.DiscoveryApp"; /** Constant for the graphical installer class name. */ private static final String INSTALLER = "com.sun.midp.installer.GraphicalInstaller"; /** Constant for the CA manager class name. */ private static final String CA_MANAGER = "com.sun.midp.appmanager.CaManager"; /** Constant for the Component manager class name. */ private static final String COMP_MANAGER = "com.sun.midp.appmanager.ComponentManager"; /** True until constructed for the first time. */ private static boolean first = true; /** MIDlet Suite storage object. */ private MIDletSuiteStorage midletSuiteStorage; /** Screen that displays all installed midlets and installer */ private AppManagerPeer appManager; /** MIDlet proxy list reference. */ private MIDletProxyList midletProxyList; /** If true, MIDlet can be launched. */ private boolean allowMidletLaunch = true; /** ID of the suite to run. */ int suiteId; /** Class name of the MIDlet to run. */ String className; /** Display name of the MIDlet to run. */ String displayName; /** * If not null, this string will be available to the * MIDlet as application property arg-0 */ String arg0; /** * If not null, this string will be available to the * MIDlet as application property arg-1 */ String arg1; /** * If not null, this string will be available to the * MIDlet as application property arg-2 */ String arg2; /** UI to display error alerts. */ DisplayError displayError; /** * Create and initialize a new Manager MIDlet. */ public SMMManager() { midletSuiteStorage = MIDletSuiteStorage.getMIDletSuiteStorage(); midletProxyList = MIDletProxyList.getMIDletProxyList(); midletProxyList.setDisplayController( new SMMDisplayController(midletProxyList, MIDletSuite.INTERNAL_SUITE_ID, this.getClass().getName())); PushRegistryInternal.setMvmSingleMidletMode(); GraphicalInstaller.initSettings(); first = (getAppProperty("logo-displayed") == null); Display display = Display.getDisplay(this); displayError = new DisplayError(display); // AppSelector will be set to be current at the end of its constructor appManager = new AppManagerPeer(this, display, displayError, first, null); if (first) { first = false; } /* * Listen to the MIDlet proxy list. * This allows us to notify the Application Selector * of any changes whenever switch back to the AMS. * The listener must be set up after finishing all * initialization in the constructor. */ midletProxyList.addListener(this); } /** * Start app; there is nothing that needs to be done at start up. */ public void startApp() { } /** * Pause; there are no resources that need to be released. */ public void pauseApp() { } /** * Destroy cleans up. * * @param unconditional is ignored; this object always * destroys itself when requested. */ public void destroyApp(boolean unconditional) { // IMPL_NOTE: remove this: GraphicalInstaller.saveSettings(null, MIDletSuite.UNUSED_SUITE_ID); appManager.cleanUp(); // Ending this MIDlet ends all others. midletProxyList.shutdown(); } // ============================================================== // ------ Implementation of the MIDletProxyListListener interface /** * Called when a MIDlet is added to the list. * * @param midlet The proxy of the MIDlet being added */ public void midletAdded(MIDletProxy midlet) { appManager.notifyMidletStarted(midlet); } /** * Called when the state of a MIDlet in the list is updated. * * @param midlet The proxy of the MIDlet that was updated * @param fieldId code for which field of the proxy was updated */ public void midletUpdated(MIDletProxy midlet, int fieldId) { appManager.notifyMidletStateChanged(midlet); } /** * Called when a MIDlet is removed from the list. * * @param midlet The proxy of the removed MIDlet */ public void midletRemoved(MIDletProxy midlet) { appManager.notifyMidletExited(midlet); } /** * Called when error occurred while starting a MIDlet object. * * @param externalAppId ID assigned by the external application manager * @param suiteId Suite ID of the MIDlet * @param className Class name of the MIDlet * @param errorCode start error code * @param errorDetails start error code */ public void midletStartError(int externalAppId, int suiteId, String className, int errorCode, String errorDetails) { allowMidletLaunch = true; appManager.notifyMidletStartError(suiteId, className, errorCode, errorDetails); } /** Launches an application Isolate and waits for it to end. */ public void run() { try { Isolate appIsolate = AmsUtil.startMidletInNewIsolate(suiteId, className, displayName, arg0, arg1, arg2); appIsolate.waitForExit(); } finally { suiteId = MIDletSuite.UNUSED_SUITE_ID; className = null; displayName = null; arg0 = null; arg1 = null; arg2 = null; allowMidletLaunch = true; } } // =================================================================== // ---- Implementation of the ApplicationManager interface ------------ /** * Discover and install a suite. */ public void installSuite() { try { runMidlet(MIDletSuite.INTERNAL_SUITE_ID, DISCOVERY_APP, Resource.getString(ResourceConstants.INSTALL_APPLICATION)); } catch (Exception ex) { displayError.showErrorAlert(Resource.getString( ResourceConstants.INSTALL_APPLICATION), ex, null, null); } } /** Launch the CA manager. */ public void launchCaManager() { try { MIDletSuiteUtils.execute(MIDletSuite.INTERNAL_SUITE_ID, CA_MANAGER, Resource.getString(ResourceConstants.CA_MANAGER_APP)); } catch (Exception ex) { displayError.showErrorAlert(Resource.getString( ResourceConstants.CA_MANAGER_APP), ex, null, null); } } /** * Launch the component manager. */ public void launchComponentManager() { try { MIDletSuiteUtils.execute(MIDletSuite.INTERNAL_SUITE_ID, COMP_MANAGER, Resource.getString(ResourceConstants.COMP_MANAGER_APP)); } catch (Exception ex) { displayError.showErrorAlert(Resource.getString( ResourceConstants.COMP_MANAGER_APP), ex, null, null); } } /** Launch ODT Agent. */ public void launchODTAgent() { } /** * Launches a suite. * * @param suiteInfo information for suite to launch * @param midletToRun class name of the MIDlet to launch */ public void launchSuite(RunningMIDletSuiteInfo suiteInfo, String midletToRun) { if (Constants.MEASURE_STARTUP) { System.err.println("Application Startup Time: Begin at " +System.currentTimeMillis()); } try { // Create an instance of the MIDlet class // All other initialization happens in MIDlet constructor runMidlet(suiteInfo.suiteId, midletToRun, suiteInfo.displayName); } catch (Exception ex) { displayError.showErrorAlert(suiteInfo.displayName, ex, null, null); } } /** * Update a suite. * * @param suiteInfo information for suite to update */ public void updateSuite(RunningMIDletSuiteInfo suiteInfo) { try { runMidlet(MIDletSuite.INTERNAL_SUITE_ID, INSTALLER, null, "U", String.valueOf(suiteInfo.suiteId), null); } catch (Exception ex) { displayError.showErrorAlert(suiteInfo.displayName, ex, null, null); } } /** * Shut downt the system */ public void shutDown() { midletProxyList.shutdown(); } /** * Bring the midlet with the passed in midlet suite info to the * foreground. * * @param suiteInfo information for the midlet to be put to foreground * @param className the running MIDlet class name */ public void moveToForeground(RunningMIDletSuiteInfo suiteInfo, String className) {} /** * Exit the midlet with the passed in midlet suite info. * * @param suiteInfo information for the midlet to be terminated * @param className the running MIDlet class name */ public void exitMidlet(RunningMIDletSuiteInfo suiteInfo, String className) {} /** * Handle exit of MIDlet suite (the only MIDlet in sute exited or MIDlet * selector exited). * @param suiteInfo Containing ID of exited suite * @param className the running MIDlet class name */ public void notifySuiteExited(RunningMIDletSuiteInfo suiteInfo, String className) {} /** * Handle exit of MIDlet selector. * @param suiteInfo Containing ID of suite */ public void notifyMIDletSelectorExited(RunningMIDletSuiteInfo suiteInfo) {} // ============================================================== // ----------------- PRIVATE methods --------------------------- /** * Starts a MIDlet in a new Isolate. * * @param id ID of an installed suite * @param midlet class name of MIDlet to invoke * @param displayName name to display to the user */ private void runMidlet(int id, String midlet, String displayName) { runMidlet(id, midlet, displayName, null, null, null); } /** * Starts a MIDlet in a new Isolate with the given arguments. * * @param id ID of an installed suite * @param midlet class name of MIDlet to invoke * @param displayName name to display to the user * @param arg0 if not null, this parameter will be available to the * MIDlet as application property arg-0 * @param arg1 if not null, this parameter will be available to the * MIDlet as application property arg-1 * @param arg2 if not null, this parameter will be available to the * MIDlet as application property arg-2 */ private void runMidlet(int id, String midlet, String displayName, String arg0, String arg1, String arg2) { if (!allowMidletLaunch) { return; } this.suiteId = id; this.className = midlet; this.displayName = displayName; this.arg0 = arg0; this.arg1 = arg1; this.arg2 = arg2; new Thread(this).start(); allowMidletLaunch = false; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?