设为首页 收藏本站
查看: 1388|回复: 0

[经验分享] delphiXE7关于android API的使用和检测WIFI状态的问题

[复制链接]

尚未签到

发表于 2015-9-30 12:17:18 | 显示全部楼层 |阅读模式
  在大富翁论坛上有一篇介绍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.
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-120922-1-1.html 上篇帖子: iOS设备中WiFi、蓝牙和飞行模式的开启与关闭 下篇帖子: 【转】AllJoyn介绍--wifi直连技术
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表