| 云's profile哈侃8侃PhotosBlogLists | Help |
|
8/9/2006 操作系统版本TInt machineId; HAL::Get(HALData::EMachineUid, machineId); Knowing machineId you can determin OS version: enum TMachineID { // S60 1st Edition (0.9) Symbian v.6.1 ENokia7650 = 0x101F4FC3 ,ENokiaNGage = 0x101F8C19 ,ENokiaNGageQD = 0x101FB2B1 // S60 1st Edition, FP1 (1.2) Symbian v.6.1 ,ENokia3650 = 0x101F466A ,ENokia3660 = ENokia3650 ,ESendoX = 0X101FA031 ,ESiemensSX1 = 0x101F9071 // S60 2nd Edition Symbian v.7.0s ,ENokia6600 = 0x101FB3DD // S60 2nd Edition, FP1 Symbian v.7.0s ,ENokia3230 = 0x10200F97 ,ENokia6260 = 0x101FB3F4 ,ENokia6620 = 0x101F3EE3 ,ENokia6670 = 0x101FB3F3 ,ENokia7610 = 0x101FB3F3 // S60 2nd Edition, FP2 Symbian v.8.0a ,ENokia6630 = 0x101FBB55 ,ENokia6680 = 0x10200f99 ,ENokia6681 = 0x10200F9C ,ENokia6682 = 0x10200F9B // S60 2nd Edition, FP3 Symbian v.8.1a ,ENokiaN70 = 0x10200F9A ,ENokiaN90 = 0x10200F98 // S60 3rd Edition Symbian v.9.1 ,ENokia3250 = 0x200005F8 ,ENokiaE60 = 0x20001856 ,ENokiaE61 = 0x20001858 ,ENokiaE70 = 0x20001857 ,ENokiaN71 = 0x200005FF ,ENokiaN73 = 0x200005FB ,ENokiaN80 = 0x200005F9 ,ENokiaN91 = 0x200005FC ,ENokiaN92 = 0x200005FA }; 检测蓝牙是否开启 & 开启蓝牙在3rd之前的版本:
TBool GetBluetoothOn() // BTONOFF
{ // Create and initialise an RHostResolver RHostResolver hr; TInt res = false; TBool ret; RSocketServ socketServer;
User::LeaveIfError(socketServer.Connect()); CleanupClosePushL(socketServer); TProtocolDesc pInfo;
//_LIT(KL2Cap, "BTLinkManager"); User::LeaveIfError(socketServer.FindProtocol(_L("BTLinkManager"),pInfo)); res = hr.Open(socketServer, KBTAddrFamily, pInfo.iProtocol);
if (KErrNone != res) {
// if not success, this means bluetooth is not on ret = EFalse; } else
{ ret = ETrue; // Bluetooth is already ON hr.Close(); } CleanupStack::PopAndDestroy(1);
return ret;
} 或者
RSharedDataClient sd;
sd.Connect(0); sd.Assign( TUid::Uid( 0x10005952 ) ); 在3rd里可以这样做:
CRepository* cr = CRepository::NewLC( KCRUidBluetoothPowerState );
TInt value; cr->Get( KBTPowerState, value ); if(value==EBTPowerOn) aPower=1; CleanupStack::PopAndDestroy( cr ); 注意:一定要在IDE中设置好3rd API的相关权限,否则会得到-46的错误代码,表示没有权限调用Get函数。
开启蓝牙
1. 弹出用户确认对话框的方式
头文件中:
RNotifier iNotifier;
TBTDeviceResponseParamsPckg iNotifierResult; TPckgBuf<TBool> pckg; CPP中:
User::LeaveIfError( iNotifier.Connect() );
iNotifier.StartNotifierAndGetResponse( iStatus, KPowerModeSettingNotifierUid, pckg, iNotifierResult ); iState = EOpeningBT;
SetActive(); 2.不经过用户确认,自动打开蓝牙
对SDK 1.2中的bteng.llib进行reverse engineering,然后使用其中的CBTMCMSettings类
// turn on Bluetooth in case it was off
CBTMCMSettings settings= CBTMCMSettings::NewL( (MBTMCMSettingsCB*)NULL );
settings->SetPowerStateL(ETrue,EFalse ); // on, off is (EFalse,EFalse) 在3rd中,还有一种办法,理论上也可以开启蓝牙,但由于权限不够,在真机上没有测试成功。
CRepository* cr = CRepository::NewLC( KCRUidBluetoothPowerState );
TInt err = cr->Set(KBTPowerState,EBTPowerOn); 此时在真机上err的值为-46表示没有权限。 |
|
|