1,314
社区成员




uses
Androidapi.JNI.Wifi,
Androidapi.Helpers,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNIBridge;
procedure TForm1.FormCreate(Sender: TObject);
var
Obj: JObject;
WifiManager: JWifiManager;
WifiInfo: JWifiInfo;
begin
Obj := SharedActivityContext.getSystemService
(TJContext.JavaClass.WIFI_SERVICE);
if Obj = nil then
Exit;
WifiManager := TJWiFiManager.Wrap((Obj as ILocalObject).GetObjectID);
WifiInfo := WifiManager.getConnectionInfo;
接下来,是我第一次将它改写成BCB的代码:
JObject *WifiManagerObj;
JWifiManager *WifiManager;
JWifiInfo *WifiInfo;
WifiManagerObj = SharedActivityContext()->getSystemService(TJContext::JavaClass->WIFI_SERVICE);
if( WifiManagerObj !=NULL )
{
WifiManager = TJWifiManager::Wrap( static_cast<_di_ILocalObject>(WifiManagerObj*)->GetObjectID());
WifiInfo = WifiManager->getConnectionInfo();
lblDecrypt->Text=JStringToString(WifiInfo->getMacAddress());
}
这段代码可以编译通过,但是手机上面一运行,就直接出AV错误
然后我就在网上到处找,到处看,试了好多代码,都不行,因为我的手机是安卓5.0,XE7是4.2所以我一度怀疑是SDK的问题,毕竟我没写过安卓程序,完全不了解。但是当我搜索了一番更新XE7安卓SDK的方法后,我还是放弃了,万一整坏了咋办,又要重新装,麻烦。
最终我修改代码如下,可以顺利在手机上读取wifi的MAC地址了:
_di_JObject WifiManagerObj;
_di_JWifiManager WifiManager;
_di_JWifiInfo WifiInfo;
WifiManagerObj = SharedActivityContext()->getSystemService(TJContext::JavaClass->WIFI_SERVICE);
if( WifiManagerObj !=NULL )
{
WifiManager = TJWifiManager::Wrap( static_cast<_di_ILocalObject>(WifiManagerObj)->GetObjectID());
WifiInfo = WifiManager->getConnectionInfo();
lblDecrypt->Text=JStringToString(WifiInfo->getMacAddress());
}
这就是最后的代码在标签“lblDecrypt”中,将会显示手机的MAC地址,至于为什么这样改,我也不知道。。。。
所以我想请妖哥给解答一下,因为在头文件中,这些类型被声明为“Interfac”,在语法上我不知道怎么弄,可以说写出这个程序,运气也占一部分成分吧。。。。