javanotify_lifecycle.c
来自「This is a resource based on j2me embedde」· C语言 代码 · 共 860 行 · 第 1/2 页
C
860 行
if (jadFilePathLen >= BINARY_BUFFER_MAX_LEN){
REPORT_ERROR(LC_AMS, "javanotify_install_midlet_from_filesystem(): jadFilePathLen is too long");
return;
}
memset(urlAddress, 0, BINARY_BUFFER_MAX_LEN);
unicodeToNative(jadFilePath, jadFilePathLen,
(unsigned char *)urlAddress, BINARY_BUFFER_MAX_LEN);
argv[argc++] = urlAddress;
javacall_lifecycle_state_changed(JAVACALL_LIFECYCLE_MIDLET_STARTED, JAVACALL_OK);
res = runMidlet(argc, argv);
}
/**
* A notification function for telling Java to perform installation of
* a MIDlet with parameters
*
* If the given url is of the form http://www.sun.com/a/b/c/d.jad then
* java will start a graphical installer will download the MIDlet
* fom the internet.
* If the given url is a file url (see below, file:///a/b/c/d.jar or
* file:///a/b/c/d/jad) installation will be performed
* in the backgroudn without launching the graphic installer application
*
*
* @param url of MIDlet to install, can be either one of the following
* 1. A full path to the jar file, of the following form file:///a/b/c/d.jar
* 2. A full path to the JAD file, of the following form file:///a/b/c/d.jad
* 3. An http url of jad file, of the following form,
* http://www.sun.com/a/b/c/d.jad
* @param silentInstall install the MIDlet without user interaction
* @param forceUpdate install the MIDlet even if it already exist regardless
* of version
*/
void javanotify_install_midlet_wparams(const char* httpUrl,
int silentInstall, int forceUpdate) {
int argc = 0;
char *argv[MIDP_RUNMIDLET_MAXIMUM_ARGS];
javacall_result res;
int length;
REPORT_INFO2(LC_CORE,"javanotify_install_midlet_wparams() >> "
"httpUrl = %s, silentInstall = %d\n",
httpUrl, silentInstall);
JVM_Initialize();
if (initialize_memory_slavemode() != JAVACALL_OK) {
return;
}
argv[argc++] = "runMidlet";
argv[argc++] = "-1";
argv[argc++] = "com.sun.midp.installer.GraphicalInstaller";
if (silentInstall == 1) {
if (forceUpdate == 1) {
argv[argc++] = "FU";
} else {
argv[argc++] = "FI";
}
} else {
argv[argc++] = "I";
}
length = strlen(httpUrl);
if (length >= BINARY_BUFFER_MAX_LEN) {
REPORT_ERROR(LC_AMS, "javanotify_install_midlet_wparams(): httpUrl is too long");
return;
}
memset(urlAddress, 0, BINARY_BUFFER_MAX_LEN);
memcpy(urlAddress, httpUrl, length);
argv[argc++] = urlAddress;
javacall_lifecycle_state_changed(JAVACALL_LIFECYCLE_MIDLET_STARTED, JAVACALL_OK);
res = runMidlet(argc, argv);
}
/**
* The platform should invoke this function in platform context to start
* the Java VM with arbitrary arguments.
*
* @param argc number of command-line arguments
* @param argv array of command-line arguments
*
* @note This is a service function and it is introduced in the javacall
* interface for debug purposes. Please DO NOT CALL this function without
* being EXPLICITLY INSTRUCTED to do so.
*/
void javanotify_start_java_with_arbitrary_args(int argc, char* argv[]) {
javacall_result res;
REPORT_INFO(LC_CORE, "javanotify_start_java_with_arbitrary_args() >>\n");
if (argc > MIDP_RUNMIDLET_MAXIMUM_ARGS) {
argc = MIDP_RUNMIDLET_MAXIMUM_ARGS;
}
if (initialize_memory_slavemode() != JAVACALL_OK) {
return;
}
javacall_lifecycle_state_changed(JAVACALL_LIFECYCLE_MIDLET_STARTED, JAVACALL_OK);
res = runMidlet(argc, argv);
}
/**
* Parse options for the VM
*
* @param argc number of command-line arguments
* @param argv array of command-line arguments
*/
void javanotify_set_vm_args(int argc, char* argv[]) {
midp_jc_event_union e;
REPORT_INFO(LC_CORE, "javanotify_set_vm_args() >>\n");
if (argc > MIDP_RUNMIDLET_MAXIMUM_ARGS) {
argc = MIDP_RUNMIDLET_MAXIMUM_ARGS;
}
e.eventType = MIDP_JC_EVENT_SET_VM_ARGS;
e.data.startMidletArbitraryArgEvent.argc = argc;
memcpy(e.data.startMidletArbitraryArgEvent.argv, argv, argc * sizeof(char*));
midp_jc_event_send(&e);
}
/**
* Set VM heapsize
* @param heapsize the heap size in bytes
*/
void javanotify_set_heap_size(int heapsize) {
midp_jc_event_union e;
REPORT_INFO(LC_CORE, "javanotify_set_heap_size() >>\n");
e.eventType = MIDP_JC_EVENT_SET_HEAP_SIZE;
e.data.heap_size.heap_size = heapsize;
midp_jc_event_send(&e);
}
/**
* list the MIDlet suites installed
*/
void javanotify_list_midlets(void) {
midp_jc_event_union e;
REPORT_INFO(LC_CORE, "javanotify_list_midlets() >>\n");
e.eventType = MIDP_JC_EVENT_LIST_MIDLETS;
midp_jc_event_send(&e);
}
/**
* list the MIDlet suites installed
* Each line contains one storage name
*/
void javanotify_list_storageNames(void) {
midp_jc_event_union e;
REPORT_INFO(LC_CORE, "javanotify_list_storageName() >>\n");
e.eventType = MIDP_JC_EVENT_LIST_STORAGE_NAMES;
midp_jc_event_send(&e);
}
/**
* Remove a MIDlet suite according to the given suite ID
*/
void javanotify_remove_suite(char* suite_id) {
midp_jc_event_union e;
REPORT_INFO(LC_CORE, "javanotify_remove_suite() >>\n");
e.eventType = MIDP_JC_EVENT_REMOVE_MIDLET;
e.data.removeMidletEvent.suiteID = suite_id;
midp_jc_event_send(&e);
}
/**
* Install, run, and remove the application with the specified JAD file
*/
void javanotify_transient(char* url) {
int length;
midp_jc_event_union e;
midp_jc_event_start_arbitrary_arg *data = &e.data.startMidletArbitraryArgEvent;
REPORT_INFO(LC_CORE,"javanotify_transient() >>\n");
e.eventType = MIDP_JC_EVENT_START_ARBITRARY_ARG;
data->argc = 0;
data->argv[data->argc++] = "runMidlet";
data->argv[data->argc++] = "-1";
data->argv[data->argc++] = "com.sun.midp.installer.AutoTester";
length = strlen(url);
if (length >= BINARY_BUFFER_MAX_LEN)
return;
memset(urlAddress, 0, BINARY_BUFFER_MAX_LEN);
memcpy(urlAddress, url, length);
if (strcmp(urlAddress, "none") != 0) {
data->argv[data->argc++] = urlAddress;
}
data->argv[data->argc++] = "1"; /* loop count */
midp_jc_event_send(&e);
}
/**
* The platform should invoke this function in platform context to end Java.
*/
void javanotify_shutdown(void) {
midp_jc_event_union e;
REPORT_INFO(LC_CORE, "javanotify_shutdown() >>\n");
e.eventType = MIDP_JC_EVENT_END;
javacall_lifecycle_state_changed(JAVACALL_LIFECYCLE_MIDLET_SHUTDOWN, JAVACALL_OK);
midp_jc_event_send(&e);
}
/**
* The platform should invoke this function in platform context to pause
* Java.
*/
void javanotify_pause(void) {
midp_jc_event_union e;
REPORT_INFO(LC_CORE, "javanotify_pause() >>\n");
e.eventType = MIDP_JC_EVENT_PAUSE;
midp_jc_event_send(&e);
}
/**
* The platform should invoke this function in platform context to end pause
* and resume Java.
*/
void javanotify_resume(void) {
midp_jc_event_union e;
REPORT_INFO(LC_CORE, "javanotify_resume() >>\n");
e.eventType = MIDP_JC_EVENT_RESUME;
midp_jc_event_send(&e);
}
/**
* Decode integer parameters to locale string
*/
void decodeLanguage(char* str, short languageCode, short regionCode) {
int i;
str[1] = (languageCode & 0xFF);
languageCode >>= 8;
str[0] = (languageCode & 0xFF);
languageCode >>= 8;
str[2] = '-';
str[4] = (regionCode & 0xFF);
regionCode >>= 8;
str[3] = (regionCode & 0xFF);
regionCode >>= 8;
str[5] = '\0';
}
/**
* The platform should invoke this function for locale changing
*/
void javanotify_change_locale(short languageCode, short regionCode) {
const char tmp[6];
midp_jc_event_union e;
REPORT_INFO(LC_CORE, "javanotify_change_locale() >>\n");
e.eventType = MIDP_JC_EVENT_CHANGE_LOCALE;
setSystemProperty(LOCALE, tmp);
midp_jc_event_send(&e);
}
/**
* The platform should invoke this function in platform context
* to select another running application to be the foreground.
*/
void javanotify_select_foreground_app(void) {
#if ENABLE_MULTIPLE_ISOLATES
midp_jc_event_union e;
REPORT_INFO(LC_CORE, "javanotify_switchforeground() >>\n");
e.eventType = MIDP_JC_EVENT_SWITCH_FOREGROUND;
midp_jc_event_send(&e);
#endif /* ENABLE_MULTIPLE_ISOLATES */
}
/**
* The platform should invoke this function in platform context
* to bring the Application Manager Screen to foreground.
*/
void javanotify_switch_to_ams(void) {
#if ENABLE_MULTIPLE_ISOLATES
midp_jc_event_union e;
REPORT_INFO(LC_CORE, "javanotify_selectapp() >>\n");
e.eventType = MIDP_JC_EVENT_SELECT_APP;
midp_jc_event_send(&e);
#endif /* ENABLE_MULTIPLE_ISOLATES */
}
/**
* The platform should invoke this function in platform context to pause
* Java bytecode execution (without invoking pauseApp)
*/
void javanotify_internal_pause(void) {
midp_jc_event_union e;
REPORT_INFO(LC_CORE, "javanotify_internal_pause() >>\n");
e.eventType = MIDP_JC_EVENT_INTERNAL_PAUSE;
midp_jc_event_send(&e);
}
/**
* The platform should invoke this function in platform context to end
* an internal pause and resume Java bytecode processing
*/
void javanotify_internal_resume(void) {
midp_jc_event_union e;
REPORT_INFO(LC_CORE, "javanotify_internal_resume() >>\n");
e.eventType = MIDP_JC_EVENT_INTERNAL_RESUME;
midp_jc_event_send(&e);
}
/**
* A notification function for telling Java to perform installation of
* a content via http, for SprintAMS.
*
* This function requires that the descriptor (JADfile, or GCDfile)
* has already been downloaded and resides somewhere on the file system.
* The function also requires the full URL that was used to download the
* file.
*
* The given URL should be of the form http://www.sun.com/a/b/c/d.jad
* or http://www.sun.com/a/b/c/d.gcd.
* Java will start a graphical installer which will download the content
* fom the Internet.
*
* @param httpUrl null-terminated http URL string of the content
* descriptor. The URL is of the following form:
* http://www.website.com/a/b/c/d.jad
* @param descFilePath full path of the descriptor file which is of the
* form:
* /a/b/c/d.jad or /a/b/c/d.gcd
* @param descFilePathLen length of the file path
* @param isJadFile set to TRUE if the mime type of of the downloaded
* descriptor file is <tt>text/vnd.sun.j2me.app-descriptor</tt>. If
* the mime type is anything else (e.g., <tt>text/x-pcs-gcd</tt>),
* this must be set to FALSE.
* @param isSilent set to TRUE if the content is to be installed silently,
* without intervention from the user. (e.g., in the case of SL
* or SI messages)
*
*/
void javanotify_install_content(const char * httpUrl,
const javacall_utf16* descFilePath,
unsigned int descFilePathLen,
javacall_bool isJadFile,
javacall_bool isSilent) {
const static int SchemaLen = 16;
const static javacall_utf16 SchemaFile[] = {'f','i','l','e',':','/','/','/'};
midp_jc_event_union e;
int httpUrlLength, dscFileOffset;
REPORT_INFO(LC_CORE, "javanotify_install_content() >>\n");
if ((httpUrl == NULL) || (httpUrl == NULL)) {
return; /* mandatory parameter is NULL */
}
httpUrlLength = strlen(httpUrl) + 1;
dscFileOffset = (httpUrlLength + 1) & (-2); /* align to WORD boundary */
if ((descFilePathLen <= 0) ||
(descFilePathLen * 2 + dscFileOffset > sizeof(urlAddress))) {
return; /* static buffer so small */
}
/* Is it nessasary to add schema file like: "file:///"? */
/* Let move the input strings to the static buffer - urlAddress */
memcpy(urlAddress, httpUrl, httpUrlLength);
memcpy(urlAddress + dscFileOffset, descFilePath, descFilePathLen * 2);
e.eventType = MIDP_JC_EVENT_INSTALL_CONTENT;
e.data.install_content.httpUrl = urlAddress;
e.data.install_content.descFilePath = (javacall_utf16*) urlAddress + dscFileOffset;
e.data.install_content.descFilePathLen = descFilePathLen;
e.data.install_content.isJadFile = isJadFile;
e.data.install_content.isSilent = isSilent;
midp_jc_event_send(&e);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?