Android 用APN来获取手机号


之前很多人说无法完全获取手机号,是因为现在有的卡不能获取,有的卡能获取,现在我们可以换一种思路来考虑问题,就是用VPN的方式请看代码
  1. /** 
  2. * 电信APN列表 
  3. * @author wudongdong 
  4. * 
  5. */  
  6. public class APNNET {  
  7. public static String CTWAP="ctwap";  
  8. public static String CTNET="ctnet";  
  9. }  
  10. /** 
  11. * 电信APN列表 
  12. * @author wudongdong 
  13. * 
  14. */  
  15. public class APNNET {  
  16. public static String CTWAP="ctwap";  
  17. public static String CTNET="ctnet";  
  18. }  
  19. //获得APN的类型   
 
  1. /** 
  2. * 获得APN类型 
  3. * @author wudongdong 
  4. * 
  5. */  
  6.     
  7. public class ApnUtil {  
  8. private static Uri PREFERRED_APN_URI = Uri  
  9. .parse("content://telephony/carriers/preferapn");  
  10.     
  11. /** 
  12. * get apntype 
  13. * @param context 
  14. * @return 
  15. */  
  16.     
  17. public static String getApnType(Context context){  
  18. String apntype="nomatch";  
  19. Cursor c = context.getContentResolver().query(PREFERRED_APN_URI,nullnullnullnull);  
  20. c.moveToFirst();  
  21. String user=c.getString(c.getColumnIndex("user"));  
  22. if(user.startsWith(APNNET.CTNET)){  
  23. apntype=APNNET.CTNET;  
  24. }else if(user.startsWith(APNNET.CTWAP)){  
  25. apntype=APNNET.CTWAP;  
  26. }  
  27. return apntype;  
  28. }  
  29. }  
  30.     
  31. /** 
  32. * 获得APN类型 
  33. * @author wudongdong 
  34. * 
  35. */  
  36. public class ApnUtil {  
  37. private static Uri PREFERRED_APN_URI = Uri  
  38. .parse("content://telephony/carriers/preferapn");  
  39.   
  40.   
  41. /** 
  42. * get apntype 
  43. * @param context 
  44. * @return 
  45. */  
  46.     
  47. public static String getApnType(Context context){  
  48. String apntype="nomatch";  
  49. Cursor c = context.getContentResolver().query(PREFERRED_APN_URI,nullnullnullnull);  
  50. c.moveToFirst();  
  51. String user=c.getString(c.getColumnIndex("user"));  
  52. if(user.startsWith(APNNET.CTNET)){  
  53. apntype=APNNET.CTNET;  
  54. }else if(user.startsWith(APNNET.CTWAP)){  
  55. apntype=APNNET.CTWAP;  
  56. }  
  57. return apntype;  
  58. }  
  59. }  

获得手机号码的话可以传IMSI码到指定接口,接口地址不方便说。但可以透露一点,必须走CTWAP,这也是判断APN类型的原因,发现很多应用如果APN是走代理的话就不能联网,那么再介绍一下用APN设置网络的代理信息。

  1. Cursor c = context.getContentResolver().query(PREFERRED_APN_URI,nullnullnullnull);  
  2. c.moveToFirst();  
  3. String proxy=c.getString(c.getColumnIndex("proxy"));  
  4.   
  5.   
  6. if (!"".equals(proxy) && proxy!=null) {  
  7. Properties prop = System.getProperties();  
  8. System.getProperties().put("proxySet""true");  
  9. prop.setProperty("http.proxyHost", c.getString(c.getColumnIndex("proxy")));  
  10. prop.setProperty("http.proxyPort", c.getString(c.getColumnIndex("port")));  
  11. String authentication = c.getString(c.getColumnIndex("user"))  
  12. ":" + c.getString(c.getColumnIndex("password"));  
  13. String encodedLogin = Base64.encode(authentication);  
  14. uc.setRequestProperty("Proxy-Authorization"" BASIC "  
  15. + encodedLogin);  
  16. }  
  17.     
  18. c.close();  

相关内容