本文实例讲述了Android基于APN获取手机号的方法。分享给大家供大家参考。具体如下:
之前很多人说无法完全获取手机号,是因为现在有的卡不能获取,有的卡能获取,现在我们可以换一种思路来考虑问题,就是用APN的方式。请看代码:
APNNET.java如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
/** * 电信APN列表 * @author wudongdong * */ public class APNNET { public static String CTWAP= "ctwap" ; public static String CTNET= "ctnet" ; } /** * 电信APN列表 * @author wudongdong * */ public class APNNET { public static String CTWAP= "ctwap" ; public static String CTNET= "ctnet" ; } //获得APN的类型 /** * 获得APN类型 * @author wudongdong * */ public class ApnUtil { private static Uri PREFERRED_APN_URI = Uri .parse( "content://telephony/carriers/preferapn" ); /** * get apntype * @param context * @return */ public static String getApnType(Context context){ String apntype= "nomatch" ; Cursor c = context.getContentResolver().query(PREFERRED_APN_URI, null , null , null , null ); c.moveToFirst(); String user=c.getString(c.getColumnIndex( "user" )); if (user.startsWith(APNNET.CTNET)){ apntype=APNNET.CTNET; } else if (user.startsWith(APNNET.CTWAP)){ apntype=APNNET.CTWAP; } return apntype; } } /** * 获得APN类型 * @author wudongdong * */ public class ApnUtil { private static Uri PREFERRED_APN_URI = Uri .parse( "content://telephony/carriers/preferapn" ); /** * get apntype * @param context * @return */ public static String getApnType(Context context){ String apntype= "nomatch" ; Cursor c = context.getContentResolver().query(PREFERRED_APN_URI, null , null , null , null ); c.moveToFirst(); String user=c.getString(c.getColumnIndex( "user" )); if (user.startsWith(APNNET.CTNET)){ apntype=APNNET.CTNET; } else if (user.startsWith(APNNET.CTWAP)){ apntype=APNNET.CTWAP; } return apntype; } } |
Java代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/** 获得手机号码的话可以传IMSI码到指定接口,接口地址不方便说。但可以透露一点,必须走CTWAP,这也是判断APN类型的原因,发现很多应用如果APN是走代理的话就不能联网,那么再介绍一下用APN设置网络的代理信息。 */ Cursor c = context.getContentResolver().query(PREFERRED_APN_URI, null , null , null , null ); c.moveToFirst(); String proxy=c.getString(c.getColumnIndex( "proxy" )); if (! "" .equals(proxy) && proxy!= null ) { Properties prop = System.getProperties(); System.getProperties().put( "proxySet" , "true" ); prop.setProperty( "http.proxyHost" , c.getString(c.getColumnIndex( "proxy" ))); prop.setProperty( "http.proxyPort" , c.getString(c.getColumnIndex( "port" ))); String authentication = c.getString(c.getColumnIndex( "user" )) + ":" + c.getString(c.getColumnIndex( "password" )); String encodedLogin = Base64.encode(authentication); uc.setRequestProperty( "Proxy-Authorization" , " BASIC " + encodedLogin); } c.close(); |
希望本文所述对大家的Android程序设计有所帮助。