获取手机IP地址以及获取手机号码+运营商

来源:互联网 发布:sql having用法 编辑:程序博客网 时间:2024/06/08 14:55

在android2.3以下的系统中,可以使用如下的代码来获取Android系统的本地IP地址:

private String getLocalIPAddress1() throws SocketException{ 
    for(Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();en.hasMoreElements();){ 
        NetworkInterface intf = en.nextElement();  
        for(Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();){ 
            InetAddress inetAddress = enumIpAddr.nextElement(); 
            if(!inetAddress.isLoopbackAddress()){ 
                return inetAddress.getHostAddress().toString(); 
            } 
        } 
    } 
    return "null"; 

但是,在android4.0以上系统中,上面的代码仅能够返回一个ipv6的地址,如果需要获取ip v4的地址,可以这么更改:
private String getLocalIPAddress()  { 
try {
    for(Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();en.hasMoreElements();){ 
        NetworkInterface intf = en.nextElement(); 
        for(Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();){ 
            InetAddress inetAddress = enumIpAddr.nextElement(); 
            if(!inetAddress.isLoopbackAddress() && (inetAddress instanceof Inet4Address)){ 
            Log.e("TTT", "ipv4:"+inetAddress.getHostAddress().toString());
                return inetAddress.getHostAddress().toString(); 
            } 
        } 
    } 
} catch (Exception e) {
}
    return "null"; 

在WiFi开启的情况下使用WIFI的ipv4地址

private void wifiIP() {
//获取wifi服务  
    WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);  
    //判断wifi是否开启  
//    if (!wifiManager.isWifiEnabled()) {  
//    wifiManager.setWifiEnabled(true);  //开启wifi  
//    }  
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();       
    int ipAddress = wifiInfo.getIpAddress();   
    String ip =(ipAddress & 0xFF ) + "." +       
     ((ipAddress >> 8 ) & 0xFF) + "." +       
     ((ipAddress >> 16 ) & 0xFF) + "." +       
     ( ipAddress >> 24 & 0xFF) ;   
}  


//获取本机手机号码以及运营商

private void getPhoneNumber(Context context) {

SIMCardInfo siminfo = new SIMCardInfo(context);
if ( siminfo != null) {
Log.i(TAG, "运营商商:" + siminfo.getProvidersName());
Log.i(TAG, "本机号码" + siminfo.getNativePhoneNumber());

}

}

//下面是 SIMCardInfo类

public class SIMCardInfo {
/**
* TelephonyManager提供设备上获取通讯服务信息的入口。 应用程序可以使用这个类方法确定的电信服务商和国家 以及某些类型的用户访问信息。
* 应用程序也可以注册一个监听器到电话收状态的变化。不需要直接实例化这个类
* 使用Context.getSystemService(Context.TELEPHONY_SERVICE)来获取这个类的实例。
*/
private TelephonyManager telephonyManager;
/**
* 国际移动用户识别码
*/
private String IMSI;


public SIMCardInfo(Context context) {
telephonyManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
}


/**
* Role:获取当前设置的电话号码
*

*
*/
public String getNativePhoneNumber() {
String NativePhoneNumber = null;
NativePhoneNumber = telephonyManager.getLine1Number();
return telephonyManager.getLine1Number();
}
/**
* 获取手机服务商信息
* 需要加入权限<uses-permission
* android:name="android.permission.READ_PHONE_STATE"/>
*

* @author CODYY)peijiangping
*/
public String getProvidersName() {
String ProvidersName = null;
// 返回唯一的用户ID;就是这张卡的编号神马的
IMSI = telephonyManager.getSubscriberId();
// IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。
// Log.i("tag",IMSI);
if(IMSI == null || "".equals(IMSI)){
ProvidersName = "获取手机号码失败";
}else
if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {
ProvidersName = "中国移动";
} else if (IMSI.startsWith("46001")) {
ProvidersName = "中国联通";
} else if (IMSI.startsWith("46003")) {
ProvidersName = "中国电信";
}
return ProvidersName;
}
}

0 0
原创粉丝点击