android4.2系统,实现应用层调用以太网/3G网卡

android开发的SDK中,没有提供3G网卡和以太网的操作方法,但是有些设备(包括平板和手机)可以在设置中开启“以太网”功能,就可以利用usb接口转网线,或者3G网卡连接上网。也就是说系统中提供了Ethernet(以太网)的开启功能,不过函数接口没有公开,所以没有android源码的话,是不可能操作以太网的。

因此在开发中遇到了这样的问题:当自己开发的android设备屏蔽了系统的launcher时,就没有了设置界面,而设置中以太网是默认关闭的。那么自己开发的其他应用便无法打开以太网。于是乎,po主潜心研究了framework层的Ethernet的相关代码。有用的代码在源码中的位置(使用的是android4.2.2,,全志的板子):

\frameworks\base\ethernet\java\android\net\ethernet

\frameworks\base\services\java\com\android\server\EthernetService.java

当然自己在研究相关源码时,走了很多弯路,从设置界面的代码一直研究到内核。。刚开始的做法是定制系统,直接让Ethernet在系统中默认启动,参考了网上别人的做法,修改了很多配置文件。虽然做到了在系统启动时,“使用以太网”已经默认打了钩,但是仍然需要点击两次才可以使用以太网。也就是说如果去掉系统默认launcher界面,没有设置界面可以点击,仍然无法连接以太网。

于是乎继续深究。。此处省略阅读源码五百万行。。最后终于找到解决办法:

额。。。啰嗦一句,虽然我研究的是android源码,但要实现的是在apk中打开和关闭以太网,具体实现方法如下:

一:导入framework层的classes.jar包,顺序放在android.jar前面。路径:out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar。

二:在应用中调用EthernetManager类1.EthernetManager mEthManager;mEthManager = EthernetManager.getInstance();

2. //开启3G网卡(以太网)功能public void enableEth(String devName){final ContentResolver cResolver = getActivity().getContentResolver();//final int ethconfig1 = Settings.Secure.getInt(cResolver, Settings.Secure.ETHERNET_CONF, 0);

Settings.Secure.putString(cResolver, Settings.Secure.ETHERNET_IFNAME, devName);Settings.Secure.putInt(cResolver, Settings.Secure.ETHERNET_CONF, 1);//Settings.Secure.putInt(cResolver, Settings.Secure.ETHERNET_MODE, EthernetDevInfo.ETHERNET_CONN_MODE_DHCP);//System.out.println("++++b+++ethconfig1+1=ETHERNET_HAS_CONFIG++++++"+ethconfig1);mEthManager.setEnabled(true);}

这里面在系统中有一些写进数据库的操作。

3. 在需要开启以太网的位置调用该方法:enableEth("eth0");

之所以传参“eth0”,是我写死的做法,因为一般不会出现插入多个网线或3G网卡的情况,而第一个插入的名字就叫“eth0”。别问为什么,源码就是这么规定的

三:添加相应权限(以下几个只是举例,具体需要哪些权限根据实际而定)

//NVSIPCam Manifest<uses-permission android:name="android.permission.BROADCAST_STICKY" /><uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /><uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />

这样就可以自己写apk开启以太网/3G网卡了,而不需要去设置界面重启以太网等操作。网上相关的资料非常少,基本靠自己研究源码实现。

便觉不过如此。也许我们只是想让自己的心去旅行,

android4.2系统,实现应用层调用以太网/3G网卡

相关文章:

你感兴趣的文章:

标签云: