|
在大富翁论坛上有一篇介绍delphi xe5下获取网络状态的文章并附带了一个Androidapi.JNI.Network.pas单元,我使用到XE7下,编译后点击按钮就出来一个错误对话框什么10027什么的,开始我以为是不通用那,我就利用 爱吃猪头肉 QQ: 1444386932 提供的jar转换工具转换了安卓jar包中的文件,正常运行后还是提示错误,后来发现是原来delphi编译器没有设置安卓的权限,可是这也让我稍微学习到一点,只要将安卓的jar文件转换下能让delphi调用,应该是所有的api都可以实现调用了吧,稍微参考下网上其他编程工具写的代码就可以转换为delphi的代码,挺兴奋的,终于近了一步,大富翁论坛上看到官方也提供了一个转换工具,只能提供给正式版用户使用,暂时下载不到,以后学习的时候再说吧,顺便附上我转换的几个文件,再次感谢 爱吃猪头肉 QQ: 1444386932 提供的这么好的工具,膜拜下...
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts,
FMX.Memo, FMX.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
mmo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure print(str:string) ;
public
{ Public declarations }
/// <summary>
/// 检测安卓WIFI状态
/// </summary>
/// <returns>
/// 返回WIFI状态
/// </returns>
function IsWiFiConnected: Boolean;
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
uses Androidapi.JNI.android.net.ConnectivityManager,
Androidapi.JNI.android.net.NetworkInfo,
Androidapi.JNI.android.net.NetworkInfo_DetailedState,
Androidapi.JNI.android.net.NetworkInfo_State, FMX.Helpers.Android,
Androidapi.JNI.JavaTypes, Androidapi.JNI.GraphicsContentViewText,
FMX.Platform.Android, Androidapi.JNIBridge, Androidapi.JNI.Provider,
Androidapi.Helpers, AndroidAPI.jni.OS;
{ TForm1 }
function GetConnectivityManager: JConnectivityManager;
var
ConnectivityServiceNative: JObject;
begin
ConnectivityServiceNative := SharedActivityContext.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE);
if not Assigned(ConnectivityServiceNative) then
raise Exception.Create('Could not locate Connectivity Service');
Result := TJConnectivityManager.Wrap(
(ConnectivityServiceNative as ILocalObject).GetObjectID);
if not Assigned(Result) then
raise Exception.Create('Could not access Connectivity Manager');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if IsWiFiConnected then
begin
print('wifi正常');
end
else
begin
print('wifi断开');
end;
end;
function TForm1.IsWiFiConnected: Boolean;
var
ConnectivityManager: JConnectivityManager;
WiFiNetwork: JNetworkInfo;
begin
ConnectivityManager := GetConnectivityManager;
WiFiNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_WIFI);
Result := WiFiNetwork.isConnected;
end;
procedure TForm1.print(str: string);
begin
mmo1.Lines.Add(str)
end;
end.
//====================================================
//
// 转换来自JavaClassToDelphiUnit
// 原始作者:ying32
// QQ: 1444386932
// 396506155
// Email:yuanfen3287@vip.qq.com
//
// 修改 By:Flying Wang & 爱吃猪头肉
// 请不要移除以上的任何信息。
// 请不要将本版本发到城通网盘,否则死全家。
//
// Email:1765535979@qq.com
//
// 生成时间:2014/12/18 星期四 18:19:34
// 工具版本:1.0.2014.12.12
//
//====================================================
unit Androidapi.JNI.android.net.ConnectivityManager;
interface
uses
Androidapi.JNI.android.net.NetworkInfo,
Androidapi.JNIBridge,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.Net;
type
// ===== Forward declarations =====
JConnectivityManager = interface; //android.net.ConnectivityManager
// ===== Interface declarations =====
JConnectivityManagerClass = interface(JObjectClass)
['{713DEEDA-A465-4951-9D56-271FB50EBEBE}']
{ static Property Methods }
{class} function _GetCONNECTIVITY_ACTION: JString;
{class} function _GetEXTRA_NETWORK_INFO: JString;
{class} function _GetEXTRA_IS_FAILOVER: JString;
{class} function _GetEXTRA_OTHER_NETWORK_INFO: JString;
{class} function _GetEXTRA_NO_CONNECTIVITY: JString;
{class} function _GetEXTRA_REASON: JString;
{class} function _GetEXTRA_EXTRA_INFO: JString;
{class} function _GetACTION_BACKGROUND_DATA_SETTING_CHANGED: JString;
{class} function _GetTYPE_MOBILE: Integer;
{class} function _GetTYPE_WIFI: Integer;
{class} function _GetTYPE_MOBILE_MMS: Integer;
{class} function _GetTYPE_MOBILE_SUPL: Integer;
{class} function _GetTYPE_MOBILE_DUN: Integer;
{class} function _GetTYPE_MOBILE_HIPRI: Integer;
{class} function _GetTYPE_WIMAX: Integer;
{class} function _GetTYPE_BLUETOOTH: Integer;
{class} function _GetTYPE_DUMMY: Integer;
{class} function _GetTYPE_ETHERNET: Integer;
{class} function _GetDEFAULT_NETWORK_PREFERENCE: Integer;
{ static Methods }
{class} function isNetworkTypeValid(P1: Integer): Boolean; cdecl;
{ static Property }
{class} property CONNECTIVITY_ACTION: JString read _GetCONNECTIVITY_ACTION;
{class} property EXTRA_NETWORK_INFO: JString read _GetEXTRA_NETWORK_INFO;
{class} property EXTRA_IS_FAILOVER: JString read _GetEXTRA_IS_FAILOVER;
{class} property EXTRA_OTHER_NETWORK_INFO: JString read _GetEXTRA_OTHER_NETWORK_INFO;
{class} property EXTRA_NO_CONNECTIVITY: JString read _GetEXTRA_NO_CONNECTIVITY;
{class} property EXTRA_REASON: JString read _GetEXTRA_REASON;
{class} property EXTRA_EXTRA_INFO: JString read _GetEXTRA_EXTRA_INFO;
{class} property ACTION_BACKGROUND_DATA_SETTING_CHANGED: JString read _GetACTION_BACKGROUND_DATA_SETTING_CHANGED;
{class} property TYPE_MOBILE: Integer read _GetTYPE_MOBILE;
{class} property TYPE_WIFI: Integer read _GetTYPE_WIFI;
{class} property TYPE_MOBILE_MMS: Integer read _GetTYPE_MOBILE_MMS;
{class} property TYPE_MOBILE_SUPL: Integer read _GetTYPE_MOBILE_SUPL;
{class} property TYPE_MOBILE_DUN: Integer read _GetTYPE_MOBILE_DUN;
{class} property TYPE_MOBILE_HIPRI: Integer read _GetTYPE_MOBILE_HIPRI;
{class} property TYPE_WIMAX: Integer read _GetTYPE_WIMAX;
{class} property TYPE_BLUETOOTH: Integer read _GetTYPE_BLUETOOTH;
{class} property TYPE_DUMMY: Integer read _GetTYPE_DUMMY;
{class} property TYPE_ETHERNET: Integer read _GetTYPE_ETHERNET;
{class} property DEFAULT_NETWORK_PREFERENCE: Integer read _GetDEFAULT_NETWORK_PREFERENCE;
end;
[JavaSignature('android/net/ConnectivityManager')]
JConnectivityManager = interface(JObject)
['{0DF48060-8B57-4DEF-8BC1-1D9D2DBF9D5D}']
{ Property Methods }
{ methods }
procedure setNetworkPreference(preference: Integer); cdecl;
function getNetworkPreference: Integer; cdecl;
function getActiveNetworkInfo: JNetworkInfo; cdecl;
function getNetworkInfo(networkType: Integer): JNetworkInfo; cdecl;
function getAllNetworkInfo: TJavaObjectArray<JNetworkInfo>; cdecl;
function startUsingNetworkFeature(networkType: Integer; feature: JString): Integer; cdecl;
function stopUsingNetworkFeature(networkType: Integer; feature: JString): Integer; cdecl;
function requestRouteToHost(networkType: Integer; hostAddress: Integer): Boolean; cdecl;
function getBackgroundDataSetting: Boolean; cdecl;
{ Property }
end;
TJConnectivityManager = class(TJavaGenericImport<JConnectivityManagerClass, JConnectivityManager>) end;
implementation
procedure RegisterTypes;
begin
TRegTypes.RegisterType('Androidapi.JNI.android.net.ConnectivityManager.JConnectivityManager',
TypeInfo(Androidapi.JNI.android.net.ConnectivityManager.JConnectivityManager));
end;
initialization
RegisterTypes;
end.
//====================================================
//
// 转换来自JavaClassToDelphiUnit
// 原始作者:ying32
// QQ: 1444386932
// 396506155
// Email:yuanfen3287@vip.qq.com
//
// 修改 By:Flying Wang & 爱吃猪头肉
// 请不要移除以上的任何信息。
// 请不要将本版本发到城通网盘,否则死全家。
//
// Email:1765535979@qq.com
//
// 生成时间:2014/12/18 星期四 18:24:32
// 工具版本:1.0.2014.12.12
//
//====================================================
unit Androidapi.JNI.android.net.NetworkInfo;
interface
uses
Androidapi.JNI.android.net.NetworkInfo_DetailedState,
Androidapi.JNI.android.net.NetworkInfo_State,
Androidapi.JNIBridge,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.Net,
Androidapi.JNI.os;
type
// ===== Forward declarations =====
JNetworkInfo = interface; //android.net.NetworkInfo
// ===== Interface declarations =====
JNetworkInfoClass = interface(JObjectClass)
['{9C1E2D18-F7E9-4D0C-8844-F238B372540E}']
{ static Property Methods }
{ static Methods }
{ static Property }
end;
[JavaSignature('android/net/NetworkInfo')]
JNetworkInfo = interface(JObject)
['{C5EE947D-2A5A-47AA-A24D-3A7DAFFEF54F}']
{ Property Methods }
{ methods }
function getType: Integer; cdecl;
function getSubtype: Integer; cdecl;
function getTypeName: JString; cdecl;
function getSubtypeName: JString; cdecl;
function isConnectedOrConnecting: Boolean; cdecl;
function isConnected: Boolean; cdecl;
function isAvailable: Boolean; cdecl;
function isFailover: Boolean; cdecl;
function isRoaming: Boolean; cdecl;
function getState: JNetworkInfo_State; cdecl;
function getDetailedState: JNetworkInfo_DetailedState; cdecl;
function getReason: JString; cdecl;
function getExtraInfo: JString; cdecl;
function toString: JString; cdecl;
function describeContents: Integer; cdecl;
procedure writeToParcel(dest: JParcel; flags: Integer); cdecl;
{ Property }
end;
TJNetworkInfo = class(TJavaGenericImport<JNetworkInfoClass, JNetworkInfo>) end;
implementation
procedure RegisterTypes;
begin
TRegTypes.RegisterType('Androidapi.JNI.android.net.NetworkInfo.JNetworkInfo',
TypeInfo(Androidapi.JNI.android.net.NetworkInfo.JNetworkInfo));
end;
initialization
RegisterTypes;
end.
//====================================================
//
// 转换来自JavaClassToDelphiUnit
// 原始作者:ying32
// QQ: 1444386932
// 396506155
// Email:yuanfen3287@vip.qq.com
//
// 修改 By:Flying Wang & 爱吃猪头肉
// 请不要移除以上的任何信息。
// 请不要将本版本发到城通网盘,否则死全家。
//
// Email:1765535979@qq.com
//
// 生成时间:2014/12/18 星期四 18:36:59
// 工具版本:1.0.2014.12.12
//
//====================================================
unit Androidapi.JNI.android.net.NetworkInfo_DetailedState;
interface
uses
Androidapi.JNIBridge,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.Net;
type
// ===== Forward declarations =====
JNetworkInfo_DetailedState = interface; //android.net.NetworkInfo$DetailedState
// ===== Interface declarations =====
JNetworkInfo_DetailedStateClass = interface(JObjectClass)
['{3E279658-127E-48B4-A265-DCA4F6D19729}']
{ static Property Methods }
{class} function _GetAUTHENTICATING: JNetworkInfo_DetailedState;
{class} function _GetBLOCKED: JNetworkInfo_DetailedState;
{class} function _GetCONNECTED: JNetworkInfo_DetailedState;
{class} function _GetCONNECTING: JNetworkInfo_DetailedState;
{class} function _GetDISCONNECTED: JNetworkInfo_DetailedState;
{class} function _GetDISCONNECTING: JNetworkInfo_DetailedState;
{class} function _GetFAILED: JNetworkInfo_DetailedState;
{class} function _GetIDLE: JNetworkInfo_DetailedState;
{class} function _GetOBTAINING_IPADDR: JNetworkInfo_DetailedState;
{class} function _GetSCANNING: JNetworkInfo_DetailedState;
{class} function _GetSUSPENDED: JNetworkInfo_DetailedState;
{ static Methods }
{class} function values: TJavaObjectArray<JNetworkInfo_DetailedState>; cdecl;
{class} function valueOf(P1: JString): JNetworkInfo_DetailedState; cdecl;
{ static Property }
{class} property AUTHENTICATING: JNetworkInfo_DetailedState read _GetAUTHENTICATING;
{class} property BLOCKED: JNetworkInfo_DetailedState read _GetBLOCKED;
{class} property CONNECTED: JNetworkInfo_DetailedState read _GetCONNECTED;
{class} property CONNECTING: JNetworkInfo_DetailedState read _GetCONNECTING;
{class} property DISCONNECTED: JNetworkInfo_DetailedState read _GetDISCONNECTED;
{class} property DISCONNECTING: JNetworkInfo_DetailedState read _GetDISCONNECTING;
{class} property FAILED: JNetworkInfo_DetailedState read _GetFAILED;
{class} property IDLE: JNetworkInfo_DetailedState read _GetIDLE;
{class} property OBTAINING_IPADDR: JNetworkInfo_DetailedState read _GetOBTAINING_IPADDR;
{class} property SCANNING: JNetworkInfo_DetailedState read _GetSCANNING;
{class} property SUSPENDED: JNetworkInfo_DetailedState read _GetSUSPENDED;
end;
[JavaSignature('android/net/NetworkInfo$DetailedState')]
JNetworkInfo_DetailedState = interface(JObject)
['{B310D74B-786C-460B-A6E5-CEA0BFDF8986}']
{ Property Methods }
{ methods }
{ Property }
end;
TJNetworkInfo_DetailedState = class(TJavaGenericImport<JNetworkInfo_DetailedStateClass, JNetworkInfo_DetailedState>) end;
implementation
procedure RegisterTypes;
begin
TRegTypes.RegisterType('Androidapi.JNI.android.net.NetworkInfo_DetailedState.JNetworkInfo_DetailedState',
TypeInfo(Androidapi.JNI.android.net.NetworkInfo_DetailedState.JNetworkInfo_DetailedState));
end;
initialization
RegisterTypes;
end.
//====================================================
//
// 转换来自JavaClassToDelphiUnit
// 原始作者:ying32
// QQ: 1444386932
// 396506155
// Email:yuanfen3287@vip.qq.com
//
// 修改 By:Flying Wang & 爱吃猪头肉
// 请不要移除以上的任何信息。
// 请不要将本版本发到城通网盘,否则死全家。
//
// Email:1765535979@qq.com
//
// 生成时间:2014/12/18 星期四 18:35:41
// 工具版本:1.0.2014.12.12
//
//====================================================
unit Androidapi.JNI.android.net.NetworkInfo_State;
interface
uses
Androidapi.JNIBridge,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.Net;
type
// ===== Forward declarations =====
JNetworkInfo_State = interface; //android.net.NetworkInfo$State
// ===== Interface declarations =====
JNetworkInfo_StateClass = interface(JObjectClass)
['{7984D00F-5A1B-4208-9D34-8E474879A636}']
{ static Property Methods }
{class} function _GetCONNECTED: JNetworkInfo_State;
{class} function _GetCONNECTING: JNetworkInfo_State;
{class} function _GetDISCONNECTED: JNetworkInfo_State;
{class} function _GetDISCONNECTING: JNetworkInfo_State;
{class} function _GetSUSPENDED: JNetworkInfo_State;
{class} function _GetUNKNOWN: JNetworkInfo_State;
{ static Methods }
{class} function values: TJavaObjectArray<JNetworkInfo_State>; cdecl;
{class} function valueOf(P1: JString): JNetworkInfo_State; cdecl;
{ static Property }
{class} property CONNECTED: JNetworkInfo_State read _GetCONNECTED;
{class} property CONNECTING: JNetworkInfo_State read _GetCONNECTING;
{class} property DISCONNECTED: JNetworkInfo_State read _GetDISCONNECTED;
{class} property DISCONNECTING: JNetworkInfo_State read _GetDISCONNECTING;
{class} property SUSPENDED: JNetworkInfo_State read _GetSUSPENDED;
{class} property UNKNOWN: JNetworkInfo_State read _GetUNKNOWN;
end;
[JavaSignature('android/net/NetworkInfo$State')]
JNetworkInfo_State = interface(JObject)
['{D13A31B6-1E02-49B7-A926-DF64671A1814}']
{ Property Methods }
{ methods }
{ Property }
end;
TJNetworkInfo_State = class(TJavaGenericImport<JNetworkInfo_StateClass, JNetworkInfo_State>) end;
implementation
procedure RegisterTypes;
begin
TRegTypes.RegisterType('Androidapi.JNI.android.net.NetworkInfo_State.JNetworkInfo_State',
TypeInfo(Androidapi.JNI.android.net.NetworkInfo_State.JNetworkInfo_State));
end;
initialization
RegisterTypes;
end.
|
|
|