本文讲述无线网和以太网mac地址获取的方法: 1.以太网获取mac地址 因为机顶盒系统是linux内核的,假设ethernet是eth0,那么可以从以下文件中读取相关信息:/sys/class/net/eth0/address方法1: public static String loadFileAsString(String filePath) throws java.io.IOException{ StringBuffer fileData = new StringBuffer(1000); BufferedReader reader = new BufferedReader(new FileReader(filePath)); char[] buf = new char[1024]; int numRead=0; while((numRead=reader.read(buf)) != -1){ String readData = String.valueOf(buf, 0, numRead); fileData.append(readData); } reader.close(); return fileData.toString();}/** Get the STB MacAddress*/public String getMacAddress(){ try { return loadFileAsString("/sys/class/net/eth0/address") .toUpperCase().substring(0, 17); } catch (IOException e) { e.printStackTrace(); return null; }}方法2:NetworkInterface NIC = NetworkInterface.getByName("eth0"); byte[] buf = NIC.getHardwareAddress(); for (int i = 0; i buf.length; i++) { mac = mac + byteHEX(buf);}if (mac != null !"".equals(mac)) {
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网站空间、营销软件、网站建设、沙县网站维护、网站推广。
}2.wifi获取mac和ip首先要在manifest.xml文件中添加权限: uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/uses-permission获取mac的代码如下WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); return info.getMacAddress();获取Ip的代码public String getLocalIpAddress() { try { for (EnumerationNetworkInterface en = NetworkInterface .getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); if (intf.getName().toLowerCase().equals("eth0")) { for (EnumerationInetAddress enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { String ipaddress = inetAddress.getHostAddress().toString(); if(!ipaddress.contains("::")){//ipV6的地址 return ipaddress; } } } } else { continue; } } } catch (Exception ex) { Log.e("WifiPreference IpAddress", ex.toString()); } return null; }
三种方式进行定位,获取用户位置,分别是基于基站定位, 网络定位,GPS定位。
1.基站定位(passive):这是基于网络基站进行定位的,定位的精确度在几十米到几千米不等,在城市中基站覆盖率比较高,推荐使用基站定位,如果是在郊区,基站相距较远,基站的覆盖没有城里好,定位的误差比较大。如果在郊区不推荐使用基站定位。
2.网络定位:wifi定位,网络定位
3.GPS定位:与卫星进行通信。手机中嵌入了GPS模块(精简版的A-GPS),通过A-GPS搜索卫星, 获取经纬度。使用GPS的弊端是:必须站在空旷的地方,头顶对着天空,如果云层厚了,也会受到一定的影响。精确度:10-50米
扩展知识:
使用Android是定位必备的权限:
uses-permission android:name= " android.permission.ACCESS_FINE_LOCATION " / //精确定位
uses-permission android:name= "android.permission.ACCESS_MOCK_LOCATION" / //模拟器
uses-permission android:name= "android.permission.ACCESS_COARSE_LOCATION" / //粗糙定位
//获取定位管理对象
LocationManager lm=(LocationManager)getSystemService(LOCATION_SERVICE);
String[] names=lm.getAllProviders();//获取所有的位置提供者,一般三种
Criteria criteria=new Criteria();//查询条件,如果设置了海拔,则定位方式只能是GPS;
criteria.setCostAllowed(true);//是否产生开销,比如流量费
String provider=lm.getBaseProvider(criteria,true)//获取最好的位置提供者,第二个参数为true,表示只获取那些被打开的位置提供者
lm.requestLocationUpdates(provier,0,0,new LocationListener(){});//获取位置。第二个参数表示每隔多少时间返回一次数据,第三个参数表示被定位的物体移动每次多少米返回一次数据。
private class MyLocationListener implements LocationListener {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
@Override
public void onLocationChanged(Location location) {
System. out.println( "服务中位置监听发送了变化了" );
float accuracy = location.getAccuracy(); // 精确度
double altitude = location.getAltitude(); // 海拔
double latitude = location.getLatitude(); // 纬度
double longitude = location.getLongitude(); // 经度
String locationInfo = "jingdu:" + longitude + ",weidu:" + latitude + ",haiba:" + altitude + ",jingquedu:" + accuracy;
Editor edit = sp.edit();
edit.putString( "location", locationInfo);
edit.commit();
}
} public void onProviderDisabled(String provider) {
}
1、 选择: 设置 - 无线和网络 -WLAN设置 2、 按菜单键,然后选 高级 3、 IP地址设置选项,选择“ 使用静态IP”4、手动设置IP 地址, 大部分路由器的地址都是 192.168.1.** (XX 可以是 2-254 之间的任何数字,为了不和其他设备冲突,可以将数字设置大一些,例如 192.168.1.210等), 网关都是192.168.1.1,子网掩码都是 255.255.255.0 ,实际情况根据路由器设置。 5、设置DNS服务器地址,大部分路由器可以设置第一个DNS为路由器地(192.168.1.1),第二个DNS地址请查看路由器拨号状态下的DNS地址,也可以直接打电话问网络服务提供商。 6、 然后 保存退出 就可以了。
package org.cocos2dx.javascript.LocaltionPos;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationManager;
import android.support.v4.app.ActivityCompat;
import org.cocos2dx.javascript.AppActivity;
import org.cocos2dx.lib.Cocos2dxActivity;
import org.cocos2dx.lib.Cocos2dxJavascriptJavaBridge;
import java.io.IOException;
import java.util.List;
public class LocaltionPos {
public static String getLocation(AppActivity activity) {
if (ActivityCompat.checkSelfPermission(Cocos2dxActivity.getContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
ActivityCompat.checkSelfPermission(Cocos2dxActivity.getContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
{
return "{err:'未开启定位'}";
}
LocationManager mLocationManager = (LocationManager) Cocos2dxActivity.getContext().getSystemService(Cocos2dxActivity.getContext().LOCATION_SERVICE);
ListString providers = mLocationManager.getProviders(true);
Location bestLocation = null;
for (String provider : providers) {
Location l = mLocationManager.getLastKnownLocation(provider);
if (l == null) {
continue;
}
if (bestLocation == null || l.getAccuracy() bestLocation.getAccuracy()) {
// Found best last known location: %s", l);
bestLocation = l;
}
}
if (bestLocation != null) {
String coordinate;
String addressStr = "";
String sheng = ""; //省
String shi = ""; //市
String qu = ""; //区
String lu = ""; //路
final double longitude = bestLocation.getLongitude(); //经度
final double latitude = bestLocation.getLatitude(); //维度
Geocoder geocoder = new Geocoder(Cocos2dxActivity.getContext());
try {
ListAddress addresses = geocoder.getFromLocation(latitude, longitude,1);
StringBuilder sb = new StringBuilder();
if (addresses.size() 0) {
Address address = addresses.get(0);
int maxLine = address.getMaxAddressLineIndex();
if (maxLine = 2) {
addressStr = address.getAddressLine(0) + " " + address.getAddressLine(1);
} else {
addressStr = address.getAddressLine(0);
}
sheng = address.getAdminArea();
shi = address.getLocality();
qu = address.getSubLocality();
lu = address.getThoroughfare();
}
} catch (IOException e) {
e.printStackTrace();
}
final String pos = addressStr;//详细位置:**省**市**区**街道**小区**号
final String province = sheng;//省
final String city = shi; //市
final String district = qu; //区
final String road = lu; //路
activity.runOnGLThread(new Runnable() {
@Override
public void run() {
String tocode = "cc.game.emit(\"LocaltionPos\", "+latitude+","+longitude+","+ pos + ","+province+ ","+city+ ","+district+ ","+road+ ");";
Cocos2dxJavascriptJavaBridge.evalString(tocode);
}
});
return "";
} else {
return "{err:'位置不可知'}";
}
}
/**
* 通过经纬度得到地理位置
*/
public static void getLocalPositionByAddress( AppActivity activity ,double lng,double lat)
{
String coordinate;
String addressStr = "";
String sheng = ""; //省
String shi = ""; //市
String qu = ""; //区
String lu = ""; //路
Geocoder geocoder = new Geocoder(Cocos2dxActivity.getContext());
try {
ListAddress addresses = geocoder.getFromLocation(lat, lng,1);
StringBuilder sb = new StringBuilder();
if (addresses.size() 0) {
Address address = addresses.get(0);
int maxLine = address.getMaxAddressLineIndex();
if (maxLine = 2) {
addressStr = address.getAddressLine(0) + " " + address.getAddressLine(1);
} else {
addressStr = address.getAddressLine(0);
}
sheng = address.getAdminArea();
shi = address.getLocality();
qu = address.getSubLocality();
lu = address.getThoroughfare();
}
} catch (IOException e) {
e.printStackTrace();
}
final String pos = addressStr;//详细位置:**省**市**区**街道**小区**号
final String province = sheng;//省
final String city = shi; //市
final String district = qu; //区
final String road = lu; //路
final double longitude = lng;
final double latitude = lat;
activity.runOnGLThread(new Runnable() {
@Override
public void run() {
String tocode = "cc.game.emit(\"LocaltionPosByAddress\", "+latitude+","+longitude+","+ pos + ","+province+ ","+city+ ","+district+ ","+road+ ");";
Cocos2dxJavascriptJavaBridge.evalString(tocode);
}
});
}
}
android 从6.0开始,通过BluetoothAdapter.getDefaultAdapter().getAddress()获取的地址是一个固定值02:00:00:00:00:00。6.0已经对蓝牙Wi-Fi的MAC地址做了隐藏。
以下方法能正确的获取android自带蓝牙的Mac地址:
1.添加net.vidageek:mirror:1.6.1
2.实现过程
本人也尝试过其他方法获取,比如从cat /sys/class/net/wlan0/address 或者/sys/class/net/eth0/address路径获取,该方式有些手机能获取得到,有的不能或缺,获取到的Mac 地址还不一定准确。
一、首先介绍苹果系统下查询手机ip:
1、首先点击【设置】按钮
2、开启无线局域网
3、然后选择无线网络并连接,连接成功后,点击所连接网络后面的惊叹号图标
4、然后就能看到该无线网络的详细信息了,其中就包含了ip地址
二、介绍安卓系统下查询手机ip地址,其方法和苹果系统差不多:
打开系统设置,点击进入
点击wlan
然后进入高级设置
最后就能查看手机的mac地址和ip地址了