關(guān)于3rd程序啟動(dòng)是參數(shù)的小結(jié)
在Symbian 3rd手機(jī)上對(duì)于GUI程序的啟動(dòng)方式可以采用安裝時(shí)自啟動(dòng)、開機(jī)自啟動(dòng)、編碼啟動(dòng)和點(diǎn)擊功能表圖標(biāo)的方式啟動(dòng),有很多軟件往往對(duì)采用何種方式啟動(dòng)需要做些前后臺(tái)以及其它相關(guān)的處理方式,那么如何識(shí)別目前的GUI程序是何種啟動(dòng)呢?
方法就是通過重載GUI框架的C*AppUi:: ProcessCommandParametersL (CApaCommandLine &aCommandLine)函數(shù)(該函數(shù)還有其它重名函數(shù),這里只對(duì)最簡(jiǎn)單的形式進(jìn)行解析,拋磚引玉),對(duì)其入?yún)⑦M(jìn)行識(shí)別來判斷是何種形式的自啟動(dòng)。下面對(duì)我試驗(yàn)中的幾種情況給出示例,方便以后查詢。
1、安裝時(shí)啟動(dòng),即pkg中標(biāo)記為FR,RI標(biāo)記的啟動(dòng)方式
在C*AppUi::ProcessCommandParametersL中入?yún)⒌?/span>
aCommandLine.OpaqueData().Length()為0
2、通過Startup List開機(jī)自啟動(dòng)的方式
結(jié)果參數(shù)與1同
3、通過點(diǎn)擊程序圖片啟動(dòng)
在C*AppUi::ProcessCommandParametersL中入?yún)⒌?/span>
aCommandLine.OpaqueData().Length()為1,具體符號(hào),搞不出來,反正是ASCII碼值為1的那個(gè)符號(hào)
4、代碼編程啟動(dòng)
試過三種方式:
第一種
const TUid KAppUid={0x2CC2D30E};
TThreadId app_threadid;
RApaLsSession ls;
User::LeaveIfError(ls.Connect());
TInt err=ls.StartDocument(KNullDesC, KAppUid, app_threadid);
ls.Close();
結(jié)果同3
第二種
RApaLsSession apaLsSession;
User::LeaveIfError(apaLsSession.Connect());
CleanupClosePushL(apaLsSession);
TApaAppInfo appInfo;
TInt retVal = apaLsSession.GetAppInfo(appInfo, aAppUid);
if (retVal == KErrNone)
{
CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
cmdLine->SetCommandL(EApaCommandRun);
cmdLine->SetExecutableNameL(appInfo.iFullName);
_LIT8(KExitDesC,"start");
cmdLine->SetOpaqueDataL(KExitDesC);
User::LeaveIfError(apaLsSession.StartApp(*cmdLine));
CleanupStack::PopAndDestroy(cmdLine);
}
else
{
// The application not found!
}
CleanupStack::PopAndDestroy(&apaLsSession);
結(jié)果還是同3
第三種
_LIT8(KExitDesC,"start");
CApaCommandLine *cmd=CApaCommandLine::NewLC();
cmd->SetCommandL(EApaCommandRun);
cmd->SetExecutableNameL(_L("start.exe"));
cmd->SetOpaqueDataL(KExitDesC);
RApaLsSession als;
User::LeaveIfError(als.Connect());
CleanupClosePushL(als);
User::LeaveIfError(als.StartApp(*cmd));
CleanupStack::PopAndDestroy(2);
結(jié)果與上述就不一樣了,aCommandLine.OpaqueData()內(nèi)容就是"start",也即五位描述符長(zhǎng)度的內(nèi)容。對(duì)于第二種和第三種情況,我是百思不得其解,為什么傳執(zhí)行文件名就可以,而傳完整路徑就是不行。
好了,暫時(shí)小結(jié)到這里。好久沒更新空間,今天就上來碼幾個(gè)字。
posted on 2010-03-26 17:10
frank.sunny 閱讀(1650)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
symbian 開發(fā)