Android 4.4 以太网网络共享功能研究和实现

 

android较新的版本中,已经加入了以太网功能,用户可在设置界面设置以太网的连接方式,如DHCP/静态IP/PPPOE。

显然,android的实现中默认以太网是作为一个出去的端口(相当于路由器的WAN口),用来分享外部的internet连接。

但是部分客户要求能实现以太网来分享设备的internet网络(4G/wifi),希望实现类似于wifi热点或者USB网络共享的功能,我把它定义为以太网网络共享(相当于路由器的lan口)。

实现以太网网络共享功能,分界面部分和framework两块。

开发

1、界面部分

网络共享的界面部分代码主要在src/com/android/settings/TetherSettings.java,我们需要在原有设置界面的wifi热点、USB网络共享等下面,加上我们的以太网网络共享的checkbox,仔细发现可看到如下代码:

 addPreferencesFromResource(R.xml.tether_prefs);

 

找到tether_prefs.xml,添加checkbox选项即可:

 <CheckBoxPreference
        android:key="enable_bluetooth_tethering"
        android:title="@string/bluetooth_tether_checkbox_text"
        android:persistent="false" />

    <CheckBoxPreference
        android:key="enable_ethernet_tethering"
        android:title="@string/ethernet_tether_checkbox_text"
        android:persistent="false" />

 

接下来还需要修改config.xml,添加eth0接口;修改几个strings.xml,比较简单,这里不再赘述。

此外,原有的以太网设置和新加的以太网网络共享只允许打开一个(即要么做wan口,要么做lan口),也需要在界面上控制,是通过调用ConnectivityManager/EthernetManager实现的。

2、framework部分

主要修改了tethering和connectivityManager部分,参考了usb网络共享。

 

 测试

点击以太网网络共享,pc通过网线接入设备,pc可获得IP且可通过设备的4G模块访问外网。

 

 bug及解决

1、拔出网线后,以太网网络共享界面的checkbox自动disable。

2、PC切换网络后,通过设备的dhcp服务器拿到IP的时间很长,60秒左右。

3、在设置界面打开wifi热点和以太网共享多次,概率出现再次点击界面后没有反应。

通过修改相关代码解决。

 

转自:(恋深圳

https://download.csdn.net/download/awdxzcvbnm/10233980

代码下载:

https://download.csdn.net/download/wufoodjetsendl1001/10167610

https://download.csdn.net/download/awdxzcvbnm/10233980

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android4.4及以上版本中,可以使用WebAPI的方式来实现拍照上传功能。具体步骤如下: 1. 在HTML页面中添加一个input标签,设置type属性为file,capture属性为camera,用于调用摄像头拍照。 ```html <input type="file" accept="image/*" capture="camera" id="uploadInput"> ``` 2. 使用JavaScript获取input标签,并监听其change事件,获取拍照的图片文件对象。 ```javascript var uploadInput = document.getElementById('uploadInput'); uploadInput.addEventListener('change', function() { var file = uploadInput.files[0]; // ...将文件上传到服务器 }); ``` 3. 将获取到的图片文件对象转换为Base64编码的字符串,并将其作为图片的src属性显示在页面上。 ```javascript var reader = new FileReader(); reader.onload = function(e) { var imageData = e.target.result; var img = document.createElement('img'); img.src = imageData; document.body.appendChild(img); }; reader.readAsDataURL(file); ``` 4. 将Base64编码的图片数据发送到服务器,可以通过XMLHttpRequest对象发送POST请求,也可以使用jQuery等库进行简化操作。以下是一个示例代码,它可以将Base64编码的图片数据发送到服务器: ```javascript var xhr = new XMLHttpRequest(); xhr.open('POST', '/upload', true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { if (xhr.status === 200) { alert('上传成功!'); } else { alert('上传失败!'); } } }; xhr.send('image=' + encodeURIComponent(imageData)); ``` 注意,这段代码中的上传路径为`/upload`,需要根据实际情况进行修改。另外,为了提高用户体验,可以在调用摄像头时添加一个拍照的确认界面,让用户可以选择是否确认使用该照片。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值