精华内容
下载资源
问答
  • 下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机、手机SIM卡确保插入手机里、eclipse ADT和android-sdk开发环境 第一步:新建一个android工程(JinshanTest), ...

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码

     

    准备条件:一部安卓手机、手机SIM卡确保插入手机里、eclipse ADT和android-sdk开发环境

     

    第一步:新建一个android工程(JinshanTest),

     

    并需要在工程的AndroidManifest.xml文件中,添加权限

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

     

    图例:

     

     

    第二步:新建一个工具类PhoneInfo.java

     

    1. package com.jinshan.test;  
    2.   
    3.   
    4. import android.content.Context;  
    5. import android.telephony.TelephonyManager;  
    6.   
    7. /** 
    8.  * 读取手机设备信息测试代码 
    9.  * http://www.souapp.com 搜应用网  
    10.  * song2c@163.com 
    11.  * 宋立波 
    12.  */  
    13. public class PhoneInfo {  
    14.   
    15.     private TelephonyManager telephonyManager;  
    16.     /** 
    17.      * 国际移动用户识别码 
    18.      */  
    19.     private String IMSI;  
    20.     private Context cxt;  
    21.     public PhoneInfo(Context context) {  
    22.         cxt=context;  
    23.         telephonyManager = (TelephonyManager) context  
    24.                 .getSystemService(Context.TELEPHONY_SERVICE);  
    25.     }  
    26.   
    27.     /** 
    28.      * 获取电话号码 
    29.      */  
    30.     public String getNativePhoneNumber() {  
    31.         String NativePhoneNumber=null;  
    32.         NativePhoneNumber=telephonyManager.getLine1Number();  
    33.         return NativePhoneNumber;  
    34.     }  
    35.   
    36.     /** 
    37.      * 获取手机服务商信息 
    38.      */  
    39.     public String getProvidersName() {  
    40.         String ProvidersName = "N/A";  
    41.         try{  
    42.         IMSI = telephonyManager.getSubscriberId();  
    43.         // IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。  
    44.         System.out.println(IMSI);  
    45.         if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {  
    46.             ProvidersName = "中国移动";  
    47.         } else if (IMSI.startsWith("46001")) {  
    48.             ProvidersName = "中国联通";  
    49.         } else if (IMSI.startsWith("46003")) {  
    50.             ProvidersName = "中国电信";  
    51.         }  
    52.         }catch(Exception e){  
    53.             e.printStackTrace();  
    54.         }  
    55.         return ProvidersName;  
    56.     }  
    57.       
    58.     public String  getPhoneInfo(){  
    59.          TelephonyManager tm = (TelephonyManager)cxt.getSystemService(Context.TELEPHONY_SERVICE);  
    60.             StringBuilder sb = new StringBuilder();  
    61.   
    62.             sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId());  
    63.             sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion());  
    64.             sb.append("\nLine1Number = " + tm.getLine1Number());  
    65.             sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso());  
    66.             sb.append("\nNetworkOperator = " + tm.getNetworkOperator());  
    67.             sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName());  
    68.             sb.append("\nNetworkType = " + tm.getNetworkType());  
    69.             sb.append("\nPhoneType = " + tm.getPhoneType());  
    70.             sb.append("\nSimCountryIso = " + tm.getSimCountryIso());  
    71.             sb.append("\nSimOperator = " + tm.getSimOperator());  
    72.             sb.append("\nSimOperatorName = " + tm.getSimOperatorName());  
    73.             sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber());  
    74.             sb.append("\nSimState = " + tm.getSimState());  
    75.             sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId());  
    76.             sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber());  
    77.            return  sb.toString();  
    78.     }  
    79. }  



     

    第三步:在启动的Activity,JinshanTestActivity中添加,调用代码:

     

    1. package com.jinshan.test;  
    2.   
    3. import android.app.Activity;  
    4. import android.os.Bundle;  
    5.   
    6. public class JinshanTestActivity extends Activity {  
    7.     /** Called when the activity is first created. */  
    8.     @Override  
    9.     public void onCreate(Bundle savedInstanceState) {  
    10.         super.onCreate(savedInstanceState);  
    11.         setContentView(R.layout.main);  
    12.           
    13.         PhoneInfo siminfo = new PhoneInfo(JinshanTestActivity.this);  
    14.         System.out.println("getProvidersName:"+siminfo.getProvidersName());  
    15.         System.out.println("getNativePhoneNumber:"+siminfo.getNativePhoneNumber());  
    16.         System.out.println("------------------------");  
    17.         System.out.println("getPhoneInfo:"+siminfo.getPhoneInfo());  
    18.     }  
    19.       
    20.       
    21.       
    22. }  


    第四步,把手机使用USB线,连接到电脑上,确保是连通性,开始运行工程

     

     

     

    最后,我们看LOGCAT日志,结果如下:

    ------------------------------------------------------------

    04-01 16:20:57.105: I/System.out(952): 460003121934674
    04-01 16:20:57.105: I/System.out(952): getProvidersName:中国移动
    04-01 16:20:57.115: I/System.out(952): getNativePhoneNumber:136XXXXXXX
    04-01 16:20:57.115: I/System.out(952): ------------------------
    04-01 16:20:57.145: I/System.out(952): getPhoneInfo:
    04-01 16:20:57.145: I/System.out(952): DeviceId(IMEI) = 352XXXXXXXX61328
    04-01 16:20:57.145: I/System.out(952): DeviceSoftwareVersion = 01
    04-01 16:20:57.145: I/System.out(952): Line1Number = 136XXXXXXX
    04-01 16:20:57.145: I/System.out(952): NetworkCountryIso = cn
    04-01 16:20:57.145: I/System.out(952): NetworkOperator = 46000
    04-01 16:20:57.145: I/System.out(952): NetworkOperatorName = 中国移动
    04-01 16:20:57.145: I/System.out(952): NetworkType = 2
    04-01 16:20:57.145: I/System.out(952): PhoneType = 1
    04-01 16:20:57.145: I/System.out(952): SimCountryIso = cn
    04-01 16:20:57.145: I/System.out(952): SimOperator = 46000
    04-01 16:20:57.145: I/System.out(952): SimOperatorName = CMCC
    04-01 16:20:57.145: I/System.out(952): SimSerialNumber = 898xxxxxx90108
    04-01 16:20:57.145: I/System.out(952): SimState = 5
    04-01 16:20:57.145: I/System.out(952): SubscriberId(IMSI) = 46000xxxxxxxx4674

    那么我们来解释一下上面的信息具体代表啥意思。

     

    getNativePhoneNumber 获取的手机号

    DeviceId(IMEI)手机  国际移动用户识别码

    NetworkOperator  移动运营商编号

    NetworkOperatorName  移动运营商名称

    SimSerialNumber  SimOperator  SimCountryIso  SimSerialNumber  SubscriberId(IMSI)   关于手机SIM卡的一些详细信息

     

    其实代码中没有写 获取System.ANDROID_ID这个操作,因为很多手机设备获取不到andnroid_id

     

    当然了,我们今天主要讲述<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 光使用这个权限我们可以获得的手机设备信息和手机号

    如果想获得WIFI,蓝牙,GPS,读写SDCARD更多的信息,就需要添加其它的权限。

     

    此外,本次测试我拿自己的手机SIM卡测试是可以获取到手机号码的,当然了有些手机号码是获取不到的,这里也给大家罗列了原因,

     

    手机号码不是所有的都能获取。只是有一部分可以拿到。

    这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是 通过这个号码在网络中传递的,并不是手机号码。试想,你的SIM丢失后,补办一张新的会换号码吗?是不会的.就是因为在你的手机号码对应的IMSI号 在移动运营商中被修改成新SIM卡的IMSI号码。
      那么手机号为什么有的就能显示呢?
      这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。
      对于移动的用户,手机号码(MDN)保存在运营商的服务器中,而不是保存在SIM卡里。SIM卡只保留了IMSI和一些验证信息。手机每次入网注册的 时候,都会以短信的形式将IMSI及验证信息上传到运营商的服务器,服务器在完成注册动作之后,会以短信的形式将注册的结果下发到手机里。下发的内容会因 条件不同而不同。
      如果服务器在下发的短信中,不包含手机的号码,手机是无法取得电话号码。如果短信中包含了号码,手机才会将其缓存,以备他用.此外,对于其他运行商的SIM卡或者UIM卡,MDN有可能保存在UIM卡中。100%能够取得本机号码不太可能。
      移动神州行,联通的卡是可以取到的.动感地带的取不到.别的卡还没有试过.
      能够读取SIM卡号的话应该有前提.那就是SIM卡已经写入了本机号码,不然是无法读取的。

    转载于:https://www.cnblogs.com/lonng226/articles/4203363.html

    展开全文
  • 下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机、手机SIM卡确保插入手机里、eclipse ADT和android-sdk开发环境 第一步:新建一个android工程(JinshanTest)...

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码


    准备条件:一部安卓手机、手机SIM卡确保插入手机里、eclipse ADT和android-sdk开发环境


    第一步:新建一个android工程(JinshanTest),



    并需要在工程的AndroidManifest.xml文件中,添加权限

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>


    图例:




    第二步:新建一个工具类PhoneInfo.java

    1. package com.jinshan.test;  
    2.   
    3.   
    4. import android.content.Context;  
    5. import android.telephony.TelephonyManager;  
    6.   
    7. /** 
    8.  * 读取手机设备信息测试代码 
    9.  * http://www.souapp.com 搜应用网  
    10.  * song2c@163.com 
    11.  * 宋立波 
    12.  */  
    13. public class PhoneInfo {  
    14.   
    15.     private TelephonyManager telephonyManager;  
    16.     /** 
    17.      * 国际移动用户识别码 
    18.      */  
    19.     private String IMSI;  
    20.     private Context cxt;  
    21.     public PhoneInfo(Context context) {  
    22.         cxt=context;  
    23.         telephonyManager = (TelephonyManager) context  
    24.                 .getSystemService(Context.TELEPHONY_SERVICE);  
    25.     }  
    26.   
    27.     /** 
    28.      * 获取电话号码 
    29.      */  
    30.     public String getNativePhoneNumber() {  
    31.         String NativePhoneNumber=null;  
    32.         NativePhoneNumber=telephonyManager.getLine1Number();  
    33.         return NativePhoneNumber;  
    34.     }  
    35.   
    36.     /** 
    37.      * 获取手机服务商信息 
    38.      */  
    39.     public String getProvidersName() {  
    40.         String ProvidersName = "N/A";  
    41.         try{  
    42.         IMSI = telephonyManager.getSubscriberId();  
    43.         // IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。   
    44.         System.out.println(IMSI);  
    45.         if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {  
    46.             ProvidersName = "中国移动";  
    47.         } else if (IMSI.startsWith("46001")) {  
    48.             ProvidersName = "中国联通";  
    49.         } else if (IMSI.startsWith("46003")) {  
    50.             ProvidersName = "中国电信";  
    51.         }  
    52.         }catch(Exception e){  
    53.             e.printStackTrace();  
    54.         }  
    55.         return ProvidersName;  
    56.     }  
    57.       
    58.     public String  getPhoneInfo(){  
    59.          TelephonyManager tm = (TelephonyManager)cxt.getSystemService(Context.TELEPHONY_SERVICE);  
    60.             StringBuilder sb = new StringBuilder();  
    61.   
    62.             sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId());  
    63.             sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion());  
    64.             sb.append("\nLine1Number = " + tm.getLine1Number());  
    65.             sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso());  
    66.             sb.append("\nNetworkOperator = " + tm.getNetworkOperator());  
    67.             sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName());  
    68.             sb.append("\nNetworkType = " + tm.getNetworkType());  
    69.             sb.append("\nPhoneType = " + tm.getPhoneType());  
    70.             sb.append("\nSimCountryIso = " + tm.getSimCountryIso());  
    71.             sb.append("\nSimOperator = " + tm.getSimOperator());  
    72.             sb.append("\nSimOperatorName = " + tm.getSimOperatorName());  
    73.             sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber());  
    74.             sb.append("\nSimState = " + tm.getSimState());  
    75.             sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId());  
    76.             sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber());  
    77.            return  sb.toString();  
    78.     }  
    79. }  
    package com.jinshan.test;
    
    
    import android.content.Context;
    import android.telephony.TelephonyManager;
    
    /**
     * 读取手机设备信息测试代码
     * http://www.souapp.com 搜应用网 
     * song2c@163.com
     * 宋立波
     */
    public class PhoneInfo {
    
    	private TelephonyManager telephonyManager;
    	/**
    	 * 国际移动用户识别码
    	 */
    	private String IMSI;
    	private Context cxt;
    	public PhoneInfo(Context context) {
    		cxt=context;
    		telephonyManager = (TelephonyManager) context
    				.getSystemService(Context.TELEPHONY_SERVICE);
    	}
    
    	/**
    	 * 获取电话号码
    	 */
    	public String getNativePhoneNumber() {
    		String NativePhoneNumber=null;
    		NativePhoneNumber=telephonyManager.getLine1Number();
    		return NativePhoneNumber;
    	}
    
    	/**
    	 * 获取手机服务商信息
    	 */
    	public String getProvidersName() {
    		String ProvidersName = "N/A";
    		try{
    		IMSI = telephonyManager.getSubscriberId();
    		// IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。
    		System.out.println(IMSI);
    		if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {
    			ProvidersName = "中国移动";
    		} else if (IMSI.startsWith("46001")) {
    			ProvidersName = "中国联通";
    		} else if (IMSI.startsWith("46003")) {
    			ProvidersName = "中国电信";
    		}
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    		return ProvidersName;
    	}
    	
    	public String  getPhoneInfo(){
    		 TelephonyManager tm = (TelephonyManager)cxt.getSystemService(Context.TELEPHONY_SERVICE);
    	        StringBuilder sb = new StringBuilder();
    
    	        sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId());
    	        sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion());
    	        sb.append("\nLine1Number = " + tm.getLine1Number());
    	        sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso());
    	        sb.append("\nNetworkOperator = " + tm.getNetworkOperator());
    	        sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName());
    	        sb.append("\nNetworkType = " + tm.getNetworkType());
    	        sb.append("\nPhoneType = " + tm.getPhoneType());
    	        sb.append("\nSimCountryIso = " + tm.getSimCountryIso());
    	        sb.append("\nSimOperator = " + tm.getSimOperator());
    	        sb.append("\nSimOperatorName = " + tm.getSimOperatorName());
    	        sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber());
    	        sb.append("\nSimState = " + tm.getSimState());
    	        sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId());
    	        sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber());
    	       return  sb.toString();
    	}
    }


    第三步:在启动的Activity,JinshanTestActivity中添加,调用代码:

    1. package com.jinshan.test;  
    2.   
    3. import android.app.Activity;  
    4. import android.os.Bundle;  
    5.   
    6. public class JinshanTestActivity extends Activity {  
    7.     /** Called when the activity is first created. */  
    8.     @Override  
    9.     public void onCreate(Bundle savedInstanceState) {  
    10.         super.onCreate(savedInstanceState);  
    11.         setContentView(R.layout.main);  
    12.           
    13.         PhoneInfo siminfo = new PhoneInfo(JinshanTestActivity.this);  
    14.         System.out.println("getProvidersName:"+siminfo.getProvidersName());  
    15.         System.out.println("getNativePhoneNumber:"+siminfo.getNativePhoneNumber());  
    16.         System.out.println("------------------------");  
    17.         System.out.println("getPhoneInfo:"+siminfo.getPhoneInfo());  
    18.     }  
    19.       
    20.       
    21.       
    22. }  
    package com.jinshan.test;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    public class JinshanTestActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            PhoneInfo siminfo = new PhoneInfo(JinshanTestActivity.this);
            System.out.println("getProvidersName:"+siminfo.getProvidersName());
            System.out.println("getNativePhoneNumber:"+siminfo.getNativePhoneNumber());
            System.out.println("------------------------");
            System.out.println("getPhoneInfo:"+siminfo.getPhoneInfo());
        }
        
        
        
    }

    第四步,把手机使用USB线,连接到电脑上,确保是连通性,开始运行工程




    最后,我们看LOGCAT日志,结果如下:

    ------------------------------------------------------------

    04-01 16:20:57.105: I/System.out(952): 460003121934674
    04-01 16:20:57.105: I/System.out(952): getProvidersName:中国移动
    04-01 16:20:57.115: I/System.out(952): getNativePhoneNumber:136XXXXXXX
    04-01 16:20:57.115: I/System.out(952): ------------------------
    04-01 16:20:57.145: I/System.out(952): getPhoneInfo:
    04-01 16:20:57.145: I/System.out(952): DeviceId(IMEI) = 352XXXXXXXX61328
    04-01 16:20:57.145: I/System.out(952): DeviceSoftwareVersion = 01
    04-01 16:20:57.145: I/System.out(952): Line1Number = 136XXXXXXX
    04-01 16:20:57.145: I/System.out(952): NetworkCountryIso = cn
    04-01 16:20:57.145: I/System.out(952): NetworkOperator = 46000
    04-01 16:20:57.145: I/System.out(952): NetworkOperatorName = 中国移动
    04-01 16:20:57.145: I/System.out(952): NetworkType = 2
    04-01 16:20:57.145: I/System.out(952): PhoneType = 1
    04-01 16:20:57.145: I/System.out(952): SimCountryIso = cn
    04-01 16:20:57.145: I/System.out(952): SimOperator = 46000
    04-01 16:20:57.145: I/System.out(952): SimOperatorName = CMCC
    04-01 16:20:57.145: I/System.out(952): SimSerialNumber = 898xxxxxx90108
    04-01 16:20:57.145: I/System.out(952): SimState = 5
    04-01 16:20:57.145: I/System.out(952): SubscriberId(IMSI) = 46000xxxxxxxx4674

    那么我们来解释一下上面的信息具体代表啥意思。


    getNativePhoneNumber 获取的手机号

    DeviceId(IMEI)手机  国际移动用户识别码

    NetworkOperator  移动运营商编号

    NetworkOperatorName  移动运营商名称

    SimSerialNumber  SimOperator  SimCountryIso  SimSerialNumber  SubscriberId(IMSI)   关于手机SIM卡的一些详细信息


    其实代码中没有写 获取System.ANDROID_ID这个操作,因为很多手机设备获取不到andnroid_id


    当然了,我们今天主要讲述<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 光使用这个权限我们可以获得的手机设备信息和手机号

    如果想获得WIFI,蓝牙,GPS,读写SDCARD更多的信息,就需要添加其它的权限。


    此外,本次测试我拿自己的手机SIM卡测试是可以获取到手机号码的,当然了有些手机号码是获取不到的,这里也给大家罗列了原因,


    手机号码不是所有的都能获取。只是有一部分可以拿到。

    这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。试想,你的SIM丢失后,补办一张新的会换号码吗?是不会的.就是因为在你的手机号码对应的IMSI号 在移动运营商中被修改成新SIM卡的IMSI号码。
      那么手机号为什么有的就能显示呢?
      这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。
      对于移动的用户,手机号码(MDN)保存在运营商的服务器中,而不是保存在SIM卡里。SIM卡只保留了IMSI和一些验证信息。手机每次入网注册的时候,都会以短信的形式将IMSI及验证信息上传到运营商的服务器,服务器在完成注册动作之后,会以短信的形式将注册的结果下发到手机里。下发的内容会因条件不同而不同。
      如果服务器在下发的短信中,不包含手机的号码,手机是无法取得电话号码。如果短信中包含了号码,手机才会将其缓存,以备他用.此外,对于其他运行商的SIM卡或者UIM卡,MDN有可能保存在UIM卡中。100%能够取得本机号码不太可能。
      移动神州行,联通的卡是可以取到的.动感地带的取不到.别的卡还没有试过.
      能够读取SIM卡号的话应该有前提.那就是SIM卡已经写入了本机号码,不然是无法读取的。

    http://bbs.gfan.com/android-323295-1-1.html

    展开全文
  • 下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机、手机SIM卡确保插入手机里、eclipse ADT和android-sdk开发环境 第一步:新建一个android工程(JinshanTest), ...
    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码

    准备条件:一部安卓手机、手机SIM卡确保插入手机里、eclipse ADT和android-sdk开发环境

    第一步:新建一个android工程(JinshanTest),


    并需要在工程的AndroidManifest.xml文件中,添加权限
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

    图例:



    第二步:新建一个工具类PhoneInfo.java
     

    [java]
    package com.jinshan.test;


    import android.content.Context;
    import android.telephony.TelephonyManager;

    /**
    * 读取手机设备信息测试代码
    * http://www.souapp.com 搜应用网
    * song2c@163.com
    * 宋立波
    */
    public class PhoneInfo {

        private TelephonyManager telephonyManager;
        /**
         * 国际移动用户识别码
         */
        private String IMSI;
        private Context cxt;
        public PhoneInfo(Context context) {
            cxt=context;
            telephonyManager = (TelephonyManager) context
                    .getSystemService(Context.TELEPHONY_SERVICE);
        }

        /**
         * 获取电话号码
         */
        public String getNativePhoneNumber() {
            String NativePhoneNumber=null;
            NativePhoneNumber=telephonyManager.getLine1Number();
            return NativePhoneNumber;
        }

        /**
         * 获取手机服务商信息
         */
        public String getProvidersName() {
            String ProvidersName = "N/A";
            try{
            IMSI = telephonyManager.getSubscriberId();
            // IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。
            System.out.println(IMSI);
            if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {
                ProvidersName = "中国移动";
            } else if (IMSI.startsWith("46001")) {
                ProvidersName = "中国联通";
            } else if (IMSI.startsWith("46003")) {
                ProvidersName = "中国电信";
            }
            }catch(Exception e){
                e.printStackTrace();
            }
            return ProvidersName;
        }
        
        public String  getPhoneInfo(){
             TelephonyManager tm = (TelephonyManager)cxt.getSystemService(Context.TELEPHONY_SERVICE);
                StringBuilder sb = new StringBuilder();

                sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId());
                sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion());
                sb.append("\nLine1Number = " + tm.getLine1Number());
                sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso());
                sb.append("\nNetworkOperator = " + tm.getNetworkOperator());
                sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName());
                sb.append("\nNetworkType = " + tm.getNetworkType());
                sb.append("\nPhoneType = " + tm.getPhoneType());
                sb.append("\nSimCountryIso = " + tm.getSimCountryIso());
                sb.append("\nSimOperator = " + tm.getSimOperator());
                sb.append("\nSimOperatorName = " + tm.getSimOperatorName());
                sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber());
                sb.append("\nSimState = " + tm.getSimState());
                sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId());
                sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber());
               return  sb.toString();
        }
    }


    第三步:在启动的Activity,JinshanTestActivity中添加,调用代码:

    [java]
    package com.jinshan.test;

    import android.app.Activity;
    import android.os.Bundle;

    public class JinshanTestActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            PhoneInfo siminfo = new PhoneInfo(JinshanTestActivity.this);
            System.out.println("getProvidersName:"+siminfo.getProvidersName());
            System.out.println("getNativePhoneNumber:"+siminfo.getNativePhoneNumber());
            System.out.println("------------------------");
            System.out.println("getPhoneInfo:"+siminfo.getPhoneInfo());
        }
        
        
        
    }

    第四步,把手机使用USB线,连接到电脑上,确保是连通性,开始运行工程


    \


    最后,我们看LOGCAT日志,结果如下:

    ------------------------------------------------------------

    04-01 16:20:57.105: I/System.out(952): 460003121934674
    04-01 16:20:57.105: I/System.out(952): getProvidersName:中国移动
    04-01 16:20:57.115: I/System.out(952): getNativePhoneNumber:136XXXXXXX
    04-01 16:20:57.115: I/System.out(952): ------------------------
    04-01 16:20:57.145: I/System.out(952): getPhoneInfo:
    04-01 16:20:57.145: I/System.out(952): DeviceId(IMEI) = 352XXXXXXXX61328
    04-01 16:20:57.145: I/System.out(952): DeviceSoftwareVersion = 01
    04-01 16:20:57.145: I/System.out(952): Line1Number = 136XXXXXXX
    04-01 16:20:57.145: I/System.out(952): NetworkCountryIso = cn
    04-01 16:20:57.145: I/System.out(952): NetworkOperator = 46000
    04-01 16:20:57.145: I/System.out(952): NetworkOperatorName = 中国移动
    04-01 16:20:57.145: I/System.out(952): NetworkType = 2
    04-01 16:20:57.145: I/System.out(952): PhoneType = 1
    04-01 16:20:57.145: I/System.out(952): SimCountryIso = cn
    04-01 16:20:57.145: I/System.out(952): SimOperator = 46000
    04-01 16:20:57.145: I/System.out(952): SimOperatorName = CMCC
    04-01 16:20:57.145: I/System.out(952): SimSerialNumber = 898xxxxxx90108
    04-01 16:20:57.145: I/System.out(952): SimState = 5
    04-01 16:20:57.145: I/System.out(952): SubscriberId(IMSI) = 46000xxxxxxxx4674
    那么我们来解释一下上面的信息具体代表啥意思。


    getNativePhoneNumber 获取的手机号
    DeviceId(IMEI)手机  国际移动用户识别码
    NetworkOperator  移动运营商编号

    NetworkOperatorName  移动运营商名称
    SimSerialNumber  SimOperator  SimCountryIso  SimSerialNumber  SubscriberId(IMSI)   关于手机SIM卡的一些详细信息

    其实代码中没有写 获取System.ANDROID_ID这个操作,因为很多手机设备获取不到andnroid_id

    当然了,我们今天主要讲述<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 光使用这个权限我们可以获得的手机设备信息和手机号

    如果想获得WIFI,蓝牙,GPS,读写SDCARD更多的信息,就需要添加其它的权限。


    此外,本次测试我拿自己的手机SIM卡测试是可以获取到手机号码的,当然了有些手机号码是获取不到的,这里也给大家罗列了原因,


    手机号码不是所有的都能获取。只是有一部分可以拿到。

    这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。试想,你的SIM丢失后,补办一张新的会换号码吗?是不会的.就是因为在你的手机号码对应的IMSI号 在移动运营商中被修改成新SIM卡的IMSI号码。

      那么手机号为什么有的就能显示呢?

      这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。

      对于移动的用户,手机号码(MDN)保存在运营商的服务器中,而不是保存在SIM卡里。SIM卡只保留了IMSI和一些验证信息。手机每次入网注册的时候,都会以短信的形式将IMSI及验证信息上传到运营商的服务器,服务器在完成注册动作之后,会以短信的形式将注册的结果下发到手机里。下发的内容会因条件不同而不同。

      如果服务器在下发的短信中,不包含手机的号码,手机是无法取得电话号码。如果短信中包含了号码,手机才会将其缓存,以备他用.此外,对于其他运行商的SIM卡或者UIM卡,MDN有可能保存在UIM卡中。100%能够取得本机号码不太可能。

      移动神州行,联通的卡是可以取到的.动感地带的取不到.别的卡还没有试过.

      能够读取SIM卡号的话应该有前提.那就是SIM卡已经写入了本机号码,不然是无法读取的。

    展开全文
  • 下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码   准备条件:一部安卓手机、手机SIM卡确保插入手机里、eclipse ADT和android-sdk开发环境   第一步:新建一个android工程(JinshanTest)...

    http://blog.csdn.net/changemyself/article/details/7421476

     

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码

     

    准备条件:一部安卓手机、手机SIM卡确保插入手机里、eclipse ADT和android-sdk开发环境

     

    第一步:新建一个android工程(JinshanTest),

     

    并需要在工程的AndroidManifest.xml文件中,添加权限

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

     

    图例:

     

     

    第二步:新建一个工具类PhoneInfo.java

     

    [java] view plaincopyprint?
     
     
    1. package com.jinshan.test;  
    2.   
    3.   
    4. import android.content.Context;  
    5. import android.telephony.TelephonyManager;  
    6.   
    7. /** 
    8.  * 读取手机设备信息测试代码 
    9.  * http://www.souapp.com 搜应用网  
    10.  * song2c@163.com 
    11.  * 宋立波 
    12.  */  
    13. public class PhoneInfo {  
    14.   
    15.     private TelephonyManager telephonyManager;  
    16.     /** 
    17.      * 国际移动用户识别码 
    18.      */  
    19.     private String IMSI;  
    20.     private Context cxt;  
    21.     public PhoneInfo(Context context) {  
    22.         cxt=context;  
    23.         telephonyManager = (TelephonyManager) context  
    24.                 .getSystemService(Context.TELEPHONY_SERVICE);  
    25.     }  
    26.   
    27.     /** 
    28.      * 获取电话号码 
    29.      */  
    30.     public String getNativePhoneNumber() {  
    31.         String NativePhoneNumber=null;  
    32.         NativePhoneNumber=telephonyManager.getLine1Number();  
    33.         return NativePhoneNumber;  
    34.     }  
    35.   
    36.     /** 
    37.      * 获取手机服务商信息 
    38.      */  
    39.     public String getProvidersName() {  
    40.         String ProvidersName = "N/A";  
    41.         try{  
    42.         IMSI = telephonyManager.getSubscriberId();  
    43.         // IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。  
    44.         System.out.println(IMSI);  
    45.         if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {  
    46.             ProvidersName = "中国移动";  
    47.         } else if (IMSI.startsWith("46001")) {  
    48.             ProvidersName = "中国联通";  
    49.         } else if (IMSI.startsWith("46003")) {  
    50.             ProvidersName = "中国电信";  
    51.         }  
    52.         }catch(Exception e){  
    53.             e.printStackTrace();  
    54.         }  
    55.         return ProvidersName;  
    56.     }  
    57.       
    58.     public String  getPhoneInfo(){  
    59.          TelephonyManager tm = (TelephonyManager)cxt.getSystemService(Context.TELEPHONY_SERVICE);  
    60.             StringBuilder sb = new StringBuilder();  
    61.   
    62.             sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId());  
    63.             sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion());  
    64.             sb.append("\nLine1Number = " + tm.getLine1Number());  
    65.             sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso());  
    66.             sb.append("\nNetworkOperator = " + tm.getNetworkOperator());  
    67.             sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName());  
    68.             sb.append("\nNetworkType = " + tm.getNetworkType());  
    69.             sb.append("\nPhoneType = " + tm.getPhoneType());  
    70.             sb.append("\nSimCountryIso = " + tm.getSimCountryIso());  
    71.             sb.append("\nSimOperator = " + tm.getSimOperator());  
    72.             sb.append("\nSimOperatorName = " + tm.getSimOperatorName());  
    73.             sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber());  
    74.             sb.append("\nSimState = " + tm.getSimState());  
    75.             sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId());  
    76.             sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber());  
    77.            return  sb.toString();  
    78.     }  
    79. }  



     

    第三步:在启动的Activity,JinshanTestActivity中添加,调用代码:

     

    [java] view plaincopyprint?
     
     
    1. package com.jinshan.test;  
    2.   
    3. import android.app.Activity;  
    4. import android.os.Bundle;  
    5.   
    6. public class JinshanTestActivity extends Activity {  
    7.     /** Called when the activity is first created. */  
    8.     @Override  
    9.     public void onCreate(Bundle savedInstanceState) {  
    10.         super.onCreate(savedInstanceState);  
    11.         setContentView(R.layout.main);  
    12.           
    13.         PhoneInfo siminfo = new PhoneInfo(JinshanTestActivity.this);  
    14.         System.out.println("getProvidersName:"+siminfo.getProvidersName());  
    15.         System.out.println("getNativePhoneNumber:"+siminfo.getNativePhoneNumber());  
    16.         System.out.println("------------------------");  
    17.         System.out.println("getPhoneInfo:"+siminfo.getPhoneInfo());  
    18.     }  
    19.       
    20.       
    21.       
    22. }  


    第四步,把手机使用USB线,连接到电脑上,确保是连通性,开始运行工程

     

     

     

    最后,我们看LOGCAT日志,结果如下:

    ------------------------------------------------------------

    04-01 16:20:57.105: I/System.out(952): 460003121934674
    04-01 16:20:57.105: I/System.out(952): getProvidersName:中国移动
    04-01 16:20:57.115: I/System.out(952): getNativePhoneNumber:136XXXXXXX
    04-01 16:20:57.115: I/System.out(952): ------------------------
    04-01 16:20:57.145: I/System.out(952): getPhoneInfo:
    04-01 16:20:57.145: I/System.out(952): DeviceId(IMEI) = 352XXXXXXXX61328
    04-01 16:20:57.145: I/System.out(952): DeviceSoftwareVersion = 01
    04-01 16:20:57.145: I/System.out(952): Line1Number = 136XXXXXXX
    04-01 16:20:57.145: I/System.out(952): NetworkCountryIso = cn
    04-01 16:20:57.145: I/System.out(952): NetworkOperator = 46000
    04-01 16:20:57.145: I/System.out(952): NetworkOperatorName = 中国移动
    04-01 16:20:57.145: I/System.out(952): NetworkType = 2
    04-01 16:20:57.145: I/System.out(952): PhoneType = 1
    04-01 16:20:57.145: I/System.out(952): SimCountryIso = cn
    04-01 16:20:57.145: I/System.out(952): SimOperator = 46000
    04-01 16:20:57.145: I/System.out(952): SimOperatorName = CMCC
    04-01 16:20:57.145: I/System.out(952): SimSerialNumber = 898xxxxxx90108
    04-01 16:20:57.145: I/System.out(952): SimState = 5
    04-01 16:20:57.145: I/System.out(952): SubscriberId(IMSI) = 46000xxxxxxxx4674

    那么我们来解释一下上面的信息具体代表啥意思。

     

    getNativePhoneNumber 获取的手机号

    DeviceId(IMEI)手机  国际移动用户识别码

    NetworkOperator  移动运营商编号

    NetworkOperatorName  移动运营商名称

    SimSerialNumber  SimOperator  SimCountryIso  SimSerialNumber  SubscriberId(IMSI)   关于手机SIM卡的一些详细信息

     

    其实代码中没有写 获取System.ANDROID_ID这个操作,因为很多手机设备获取不到andnroid_id

     

    当然了,我们今天主要讲述<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 光使用这个权限我们可以获得的手机设备信息和手机号

    如果想获得WIFI,蓝牙,GPS,读写SDCARD更多的信息,就需要添加其它的权限。


    此外,本次测试我拿自己的手机SIM卡测试是可以获取到手机号码的,当然了有些手机号码是获取不到的,这里也给大家罗列了原因,


    手机号码不是所有的都能获取。只是有一部分可以拿到。

    这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。试想,你的SIM丢失后,补办一张新的会换号码吗?是不会的.就是因为在你的手机号码对应的IMSI号 在移动运营商中被修改成新SIM卡的IMSI号码。
      那么手机号为什么有的就能显示呢?
      这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。
      对于移动的用户,手机号码(MDN)保存在运营商的服务器中,而不是保存在SIM卡里。SIM卡只保留了IMSI和一些验证信息。手机每次入网注册的时候,都会以短信的形式将IMSI及验证信息上传到运营商的服务器,服务器在完成注册动作之后,会以短信的形式将注册的结果下发到手机里。下发的内容会因条件不同而不同。
      如果服务器在下发的短信中,不包含手机的号码,手机是无法取得电话号码。如果短信中包含了号码,手机才会将其缓存,以备他用.此外,对于其他运行商的SIM卡或者UIM卡,MDN有可能保存在UIM卡中。100%能够取得本机号码不太可能。
      移动神州行,联通的卡是可以取到的.动感地带的取不到.别的卡还没有试过.
      能够读取SIM卡号的话应该有前提.那就是SIM卡已经写入了本机号码,不然是无法读取的。

    http://bbs.gfan.com/android-323295-1-1.html

    展开全文
  • package com.example.sysact; import android.annotation.SuppressLint; import android.app.Activity; import android.content.CursorLoader; import android.content.Intent; import android.database.Cu
  • 安卓联系人app

    2018-01-09 16:04:06
    1. 获取访问手机联系人权限,读取手机原有联系人到App中. 2.新建联系人号码和姓名,并刷新保存。 3.编辑选择性删除已创建的联系人信息。 4.连接数据库实时保存更新数据。 5.长按删除该联系人。 6.查找联系人。 ...
  • 一、参考 1、Android 获取手机的厂商、型号、Android系统版本号、IMEI、当前系统语言等工具类 ...3、android 安卓APP获取手机设备信息和手机号码的代码示例 4、Android 获取本机号码 二、工具类 ...
  • 近期做注冊的时候看到非常多app手机接受到短信的时候直接填写验证码到界面省略用户自己主动输入,感觉这样确实蛮人性化的呵呵。于是自己也做了一个 步骤: 首先我使用了ContentObserver监听短信,(最好知道您的...
  • 但不可读取允许程序读取用户的日程信息允许一个程序收到广播后快速收到下一个广播允许程序获取当前或最近运行的应用允许程序从非系统拨号器里输入电话号码显示系统窗口允许程序在手机屏幕关闭后后台进程仍然运行允许...
  • 最近做注册的时候看到很多app手机接受到短信的时候直接填写验证码到界面省略用户自动输入,感觉这样确实蛮人性化的呵呵,于是自己也做了一个 步骤: 首先我使用了ContentObserver监听短信,(最好知道您的...
  • 第一步就是**ApiClient**里面编写获取验证码的方法 第二步编写**AppContent**里面的接口方法 第三步,在**StringUtils**里面编写验证号码是否是手机号的正则表达式
  • |--app信息menifest获取(如版本号) |--AsyncQueryHandler之异步查询Cursor处理 |--AutoCompleteTextView自动提示的用法 |--BitMap、Drawable、inputStream及byte[] 互转 |--ContentProvider内容提供者定义 |--...
  • 就是一个群发短息的app,在获得列表中手机号码的时候小米会直接终止,联想的可以正常获取,这是为什么呢? 还有想问一下 PendingIntent pi =PendingIntent.getActivity(EditMessage.this, 0, new Intent(), 0); /...
  • 1、 新增安卓Android手机APP客户端程序,支持目前市面上流行的Android 2.1及以上版本;客户端程序主要面向个人求职者使用,目前具备以下功能; a.个人会员注册、登录和修改密码; b.提供关键字和更多条件搜索职位,...
  • 1:安卓6.0以上的版本如何获取拨打电话和发送短信的“权限” 2.如何进入手机通讯录并返回联系号码 3.如何实现发送短信的功能 //实现拨打电话功能的Activity package com.example.administrator.phone; import ...
  • getCurrentRuntimeValue : 获取手机当前的Runtime getLauncherClassName : 获取app的启动活动的名称 getAllApps : 获取系统中所有的应用 getSDKVersion : 获取手机系统SDK版本 动画相关的工具类 -> ...
  • WidgetUtil : 监听Widget渲染状态,获取Widget宽高,在屏幕上的坐标,获取网络/本地图片尺寸. ImageUtil : 获取网络/本地图片尺寸. DirectoryUtil : 文件目录工具类. DioUtil : 单例Dio网络工具类(已迁移至此处...

空空如也

空空如也

1 2
收藏数 34
精华内容 13
关键字:

安卓app获取手机号码