1.点击“Network”将显示本机的无线及网络信息。
2.点击"WAP"将自动设接入点为CMWAP。
3.点击“GPRS”将自动设接入点为GPRS。
代码出处:http://blog.csdn.net/sodino/article/details/5916641
001 |
package lab.sodino.network; |
002 |
import java.net.InetAddress; |
003 |
import java.net.NetworkInterface; |
004 |
import java.net.SocketException; |
005 |
import java.net.UnknownHostException; |
006 |
import java.util.Enumeration; |
007 |
import android.app.Activity; |
008 |
import android.content.ContentResolver; |
009 |
import android.content.ContentValues; |
010 |
import android.content.Context; |
011 |
import android.database.Cursor; |
012 |
import android.net.ConnectivityManager; |
013 |
import android.net.NetworkInfo; |
014 |
import android.net.Uri; |
015 |
import android.net.wifi.WifiInfo; |
016 |
import android.net.wifi.WifiManager; |
017 |
import android.os.Bundle; |
018 |
import android.util.Log; |
019 |
import android.view.Menu; |
020 |
import android.view.MenuItem; |
021 |
import android.view.View; |
022 |
import android.view.View.OnClickListener; |
023 |
import android.widget.Button; |
024 |
import android.widget.TextView; |
025 |
/** |
026 |
* 1.点击"Network"将输出本机所处的网络环境。 2.点击"WAP"将设定 移动网络接入点为CMWAP。 3.点击"GPRS"将设定 |
027 |
* 移动网络接入点为CMNET。 注:自定义移动网络接入点的前提是“设置”→“无线和网络”→“移动网络”处已打勾。 |
028 |
*/ |
029 |
public class NetworkAct extends Activity { |
030 |
/** 全部的APN */ |
031 |
private static final Uri ALL_APN_URI = Uri |
032 |
.parse( "content://telephony/carriers" ); |
033 |
/** 当前default的APN记录。 */ |
034 |
private static final Uri PREFERRED_APN_URI = Uri |
035 |
.parse( "content://telephony/carriers/preferapn" ); |
036 |
private TextView textView; |
037 |
private Button btnShowNetInfo; |
038 |
private Button btnSetCMWAP; |
039 |
private Button btnSetGPRS; |
040 |
private BtnClickListener btnListener; |
041 |
private ContentValues cvWAP; |
042 |
private ContentValues cvGPRS; |
043 |
public void onCreate(Bundle savedInstanceState) { |
044 |
super .onCreate(savedInstanceState); |
045 |
setContentView(R.layout.main); |
046 |
textView = (TextView) findViewById(R.id.infoPanel); |
047 |
textView.setBackgroundColor( 0xffffffff ); |
048 |
textView.setTextColor( 0xff0000ff ); |
049 |
textView.setTextSize( 15 .0f); |
050 |
textView.setScrollBarStyle(TextView.SCROLLBARS_OUTSIDE_OVERLAY); |
051 |
btnListener = new BtnClickListener(); |
052 |
btnShowNetInfo = (Button) findViewById(R.id.showInfo); |
053 |
btnShowNetInfo.setOnClickListener(btnListener); |
054 |
btnSetCMWAP = (Button) findViewById(R.id.setCMWAP); |
055 |
btnSetCMWAP.setOnClickListener(btnListener); |
056 |
btnSetGPRS = (Button) findViewById(R.id.setGPRS); |
057 |
btnSetGPRS.setOnClickListener(btnListener); |
058 |
initAPNValues(); |
059 |
} |
060 |
private void initAPNValues() { |
061 |
cvWAP = new ContentValues(); |
062 |
cvWAP.put( "name" , "移动梦网" ); |
063 |
cvWAP.put( "apn" , "cmwap" ); |
064 |
// 需要设置为默认接入点则为default |
065 |
cvWAP.put( "type" , "default" ); |
066 |
cvWAP.put( "proxy" , "10.0.0.172" ); |
067 |
cvWAP.put( "port" , "80" ); |
068 |
cvWAP.put( "mmsproxy" , "10.0.0.172" ); |
069 |
cvWAP.put( "mmsport" , "80" ); |
070 |
cvWAP.put( "mmsprotocol" , "2.0" ); |
071 |
cvWAP.put( "mmsc" , "http://mmsc.monternet.com" ); |
072 |
cvWAP.put( "mcc" , "460" ); |
073 |
cvWAP.put( "mnc" , "02" ); |
074 |
cvWAP.put( "numeric" , "46002" ); |
075 |
cvGPRS = new ContentValues(); |
076 |
cvGPRS.put( "name" , "GPRS" ); |
077 |
cvGPRS.put( "apn" , "cmnet" ); |
078 |
// 需要设置为默认接入点则为default |
079 |
cvGPRS.put( "type" , "default" ); |
080 |
// cvGPRS.put("proxy", "10.0.0.172"); |
081 |
// cvGPRS.put("port", "80"); |
082 |
// cvGPRS.put("mmsproxy", "10.0.0.172"); |
083 |
// cvGPRS.put("mmsport", "80"); |
084 |
cvGPRS.put( "mmsprotocol" , "2.0" ); |
085 |
// cvGPRS.put("mmsc", "http://mmsc.monternet.com"); |
086 |
cvGPRS.put( "mcc" , "460" ); |
087 |
cvGPRS.put( "mnc" , "02" ); |
088 |
cvGPRS.put( "numeric" , "46002" ); |
089 |
} |
090 |
private void showNetworkInfo() { |
091 |
getLocalAddress(); |
092 |
getWifiAddress(); |
093 |
getNetworkInfo(); |
094 |
textView.append( "/nList Default Access Point Name:/n" ); |
095 |
listAllAPNs(PREFERRED_APN_URI); |
096 |
textView.append( "/nList all Access Point Name:/n" ); |
097 |
listAllAPNs(ALL_APN_URI); |
098 |
} |
099 |
private void getLocalAddress() { |
100 |
InetAddress iAdd = null ; |
101 |
try { |
102 |
iAdd = InetAddress.getLocalHost(); |
103 |
String line = "" ; |
104 |
// line = "HostName=" + iAdd.getHostName() + "/n"; |
105 |
// textView.append(line); |
106 |
// line = "CanonicalHostName=" + iAdd.getCanonicalHostName() + "/n"; |
107 |
// textView.append(line); |
108 |
// line = "HostAddress=" + iAdd.getHostAddress() + "/n"; |
109 |
// textView.append(line); |
110 |
// textView.append("/n"); |
111 |
String hostName = iAdd.getHostName(); |
112 |
if (hostName != null ) { |
113 |
InetAddress[] adds = null ; |
114 |
adds = InetAddress.getAllByName(hostName); |
115 |
if (adds != null ) { |
116 |
for ( int i = 0 ; i < adds.length; i++) { |
117 |
iAdd = adds[i]; |
118 |
line = "HostName=" + iAdd.getHostName() + "/n" ; |
119 |
textView.append(line); |
120 |
line = "CanonicalHostName=" |
121 |
+ iAdd.getCanonicalHostName() + "/n" ; |
122 |
textView.append(line); |
123 |
line = "HostAddress=" + iAdd.getHostAddress() + "/n" ; |
124 |
textView.append(line); |
125 |
textView.append( "/n" ); |
126 |
} |
127 |
} |
128 |
} |
129 |
} catch (UnknownHostException e1) { |
130 |
e1.printStackTrace(); |
131 |
} |
132 |
try { |
133 |
for (Enumeration<NetworkInterface> en = NetworkInterface |
134 |
.getNetworkInterfaces(); en.hasMoreElements();) { |
135 |
NetworkInterface intf = en.nextElement(); |
136 |
for (Enumeration<InetAddress> enumIpAddr = intf |
137 |
.getInetAddresses(); enumIpAddr.hasMoreElements();) { |
138 |
InetAddress inetAddress = enumIpAddr.nextElement(); |
139 |
// if (!inetAddress.isLoopbackAddress()) { |
140 |
textView.append( "HostAddress=" |
141 |
+ inetAddress.getHostAddress() + "/n" ); |
142 |
// } |
143 |
} |
144 |
} |
145 |
} catch (SocketException ex) { |
146 |
Log.e( "WifiPreference IpAddress" , ex.toString()); |
147 |
} |
148 |
} |
149 |
private void getWifiAddress() { |
150 |
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); |
151 |
WifiInfo info = wifi.getConnectionInfo(); |
152 |
textView.append( "HiddenSSID=" + info.getHiddenSSID() + "/n" ); |
153 |
textView.append( "IpAddress=" + formatIP4(info.getIpAddress()) + "/n" ); |
154 |
textView.append( "LinkSpeed=" + info.getLinkSpeed() + "/n" ); |
155 |
textView.append( "NetworkId=" + info.getNetworkId() + "/n" ); |
156 |
textView.append( "Rssi=" + info.getRssi() + "/n" ); |
157 |
textView.append( "SSID=" + info.getSSID() + "/n" ); |
158 |
textView.append( "MacAddress=" + info.getMacAddress() + "/n" ); |
159 |
} |
160 |
private void getNetworkInfo() { |
161 |
// 此处输出可用网络类型 |
162 |
ConnectivityManager mag = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); |
163 |
textView.append( "/nActive:/n" ); |
164 |
NetworkInfo info = mag.getActiveNetworkInfo(); |
165 |
if (info != null ) { |
166 |
textView.append( "ExtraInfo=" + info.getExtraInfo() + "/n" ); |
167 |
textView.append( "SubtypeName=" + info.getSubtypeName() + "/n" ); |
168 |
textView.append( "TypeName=" + info.getTypeName() + "/n" ); |
169 |
textView.append( "Type=" + info.getType() + "/n" ); |
170 |
} |
171 |
textView.append( "/nWifi:/n" ); |
172 |
NetworkInfo wifiInfo = mag |
173 |
.getNetworkInfo(ConnectivityManager.TYPE_WIFI); |
174 |
textView.append( "ExtraInfo=" + wifiInfo.getExtraInfo() + "/n" ); |
175 |
textView.append( "SubtypeName=" + wifiInfo.getSubtypeName() + "/n" ); |
176 |
textView.append( "TypeName=" + wifiInfo.getTypeName() + "/n" ); |
177 |
textView.append( "Type=" + wifiInfo.getType() + "/n" ); |
178 |
NetworkInfo mobInfo = mag |
179 |
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); |
180 |
textView.append( "/nMobile:/n" ); |
181 |
textView.append( "ExtraInfo=" + mobInfo.getExtraInfo() + "/n" ); |
182 |
textView.append( "SubtypeName=" + mobInfo.getSubtypeName() + "/n" ); |
183 |
textView.append( "TypeName=" + mobInfo.getTypeName() + "/n" ); |
184 |
textView.append( "Type=" + mobInfo.getType() + "/n" ); |
185 |
} |
186 |
private void listAllAPNs(Uri apnUri) { |
187 |
ContentResolver contentResolver = getContentResolver(); |
188 |
Cursor cursor = contentResolver.query(apnUri, null , null , null , null ); |
189 |
if (cursor != null ) { |
190 |
String temp = "Count=" + cursor.getCount() + " ColumnCount=" |
191 |
+ cursor.getColumnCount() + "/n" ; |
192 |
textView.append(temp); |
193 |
String key = "" ; |
194 |
while (cursor.moveToNext()) { |
195 |
key = "position" ; |
196 |
int position = cursor.getPosition(); |
197 |
textView.append( "/n" + key + "=" + String.valueOf(position) |
198 |
+ "/n" ); |
199 |
key = "_id" ; |
200 |
int id = cursor.getShort(cursor.getColumnIndex(key)); |
201 |
textView.append(key + "=" + String.valueOf(id) + "/n" ); |
202 |
appendDBColumn(cursor, "name" ); |
203 |
appendDBColumn(cursor, "apn" ); |
204 |
appendDBColumn(cursor, "type" ); |
205 |
appendDBColumn(cursor, "proxy" ); |
206 |
appendDBColumn(cursor, "port" ); |
207 |
appendDBColumn(cursor, "mmsproxy" ); |
208 |
appendDBColumn(cursor, "mmsport" ); |
209 |
appendDBColumn(cursor, "mmsprotocol" ); |
210 |
appendDBColumn(cursor, "mmsc" ); |
211 |
appendDBColumn(cursor, "current" ); |
212 |
appendDBColumn(cursor, "mcc" ); |
213 |
appendDBColumn(cursor, "mnc" ); |
214 |
appendDBColumn(cursor, "numeric" ); |
215 |
} |
216 |
} |
217 |
} |
218 |
private void appendDBColumn(Cursor cursor, String key) { |
219 |
try { |
220 |
String value = cursor.getString(cursor.getColumnIndex(key)); |
221 |
textView.append(key + "=" + value + "/n" ); |
222 |
} catch (Exception e) { |
223 |
System.out.println( "[sodino] " + e); |
224 |
} |
225 |
} |
226 |
private void setNetworkFeature() { |
227 |
// 经测试,start和stop都无效。 |
228 |
ConnectivityManager connectivityMag = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); |
229 |
int stop = connectivityMag.stopUsingNetworkFeature( |
230 |
ConnectivityManager.TYPE_WIFI, "*" ); |
231 |
textView.append( "stop=" + String.valueOf(stop) + "/n" ); |
232 |
int start = connectivityMag.startUsingNetworkFeature( |
233 |
ConnectivityManager.TYPE_MOBILE, |
234 |
ConnectivityManager.EXTRA_NETWORK_INFO); |
235 |
textView.append( "start=" + String.valueOf(start) + "/n" ); |
236 |
} |
237 |
private void setDefaultAPN(ContentValues value) { |
238 |
int _id = findAPNId(value); |
239 |
if (_id == - 1 ) { |
240 |
_id = insertAPN(value); |
241 |
} |
242 |
textView.append(value.get( "name" ) + " _id=" + _id + "/n" ); |
243 |
ContentValues values = new ContentValues(); |
244 |
values.put( "apn_id" , _id); |
245 |
ContentResolver resolver = getContentResolver(); |
246 |
int updateRow = resolver.update(PREFERRED_APN_URI, values, null , null ); |
247 |
textView.append( "updateRow=" + updateRow + "/n" ); |
248 |
textView.append( "Set " + value.get( "name" ) |
249 |
+ " as default netwrok successed!!/n" ); |
250 |
} |
251 |
private int findAPNId(ContentValues cv) { |
252 |
int id = - 1 ; |
253 |
ContentResolver contentResolver = getContentResolver(); |
254 |
Cursor cursor = contentResolver.query(ALL_APN_URI, null , null , null , |
255 |
null ); |
256 |
if (cursor != null ) { |
257 |
while (cursor.moveToNext()) { |
258 |
if (cursor.getString(cursor.getColumnIndex( "name" )).equals( |
259 |
cv.get( "name" )) |
260 |
&& cursor.getString(cursor.getColumnIndex( "apn" )) |
261 |
.equals(cv.get( "apn" )) |
262 |
&& cursor.getString(cursor.getColumnIndex( "numeric" )) |
263 |
.equals(cv.get( "numeric" ))) { |
264 |
id = cursor.getShort(cursor.getColumnIndex( "_id" )); |
265 |
break ; |
266 |
} |
267 |
} |
268 |
} |
269 |
return id; |
270 |
} |
271 |
private int insertAPN(ContentValues value) { |
272 |
int apn_Id = - 1 ; |
273 |
ContentResolver resolver = getContentResolver(); |
274 |
Uri newRow = resolver.insert(ALL_APN_URI, value); |
275 |
if (newRow != null ) { |
276 |
Cursor cursor = resolver.query(newRow, null , null , null , null ); |
277 |
int idIdx = cursor.getColumnIndex( "_id" ); |
278 |
cursor.moveToFirst(); |
279 |
apn_Id = cursor.getShort(idIdx); |
280 |
System.out.println( "[sodino] Insert New id:" + apn_Id); |
281 |
} |
282 |
return apn_Id; |
283 |
} |
284 |
public boolean onCreateOptionsMenu(Menu menu) { |
285 |
menu.add( "finish" ); |
286 |
return true ; |
287 |
} |
288 |
public boolean onOptionsItemSelected(MenuItem item) { |
289 |
if (item.getTitle().equals( "finish" )) { |
290 |
finish(); |
291 |
} |
292 |
return false ; |
293 |
} |
294 |
/** 将10进制整数形式转换成127.0.0.1形式的IP地址 */ |
295 |
private static String formatIP4( long longIP) { |
296 |
StringBuffer sb = new StringBuffer( "" ); |
297 |
sb.append(String.valueOf(longIP >>> 24 )); |
298 |
sb.append( "." ); |
299 |
sb.append(String.valueOf((longIP & 0x00FFFFFF ) >>> 16 )); |
300 |
sb.append( "." ); |
301 |
sb.append(String.valueOf((longIP & 0x0000FFFF ) >>> 8 )); |
302 |
sb.append( "." ); |
303 |
sb.append(String.valueOf(longIP & 0x000000FF )); |
304 |
return sb.toString(); |
305 |
} |
306 |
private class BtnClickListener implements OnClickListener { |
307 |
public void onClick(View v) { |
308 |
textView.setText( "" ); |
309 |
if (v == btnShowNetInfo) { |
310 |
showNetworkInfo(); |
311 |
} else if (v == btnSetCMWAP) { |
312 |
setDefaultAPN(cvWAP); |
313 |
btnSetCMWAP.setEnabled( false ); |
314 |
btnSetGPRS.setEnabled( true ); |
315 |
} else if (v == btnSetGPRS) { |
316 |
setDefaultAPN(cvGPRS); |
317 |
btnSetGPRS.setEnabled( false ); |
318 |
btnSetCMWAP.setEnabled( true ); |
319 |
} |
320 |
} |
321 |
} |
322 |
} |
01 |
<? xml version = "1.0" encoding = "utf-8" ?> |
02 |
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" |
03 |
android:orientation = "vertical" |
04 |
android:layout_width = "fill_parent" |
05 |
android:layout_height = "fill_parent" |
06 |
> |
07 |
< LinearLayout |
08 |
android:layout_width = "fill_parent" |
09 |
android:layout_height = "wrap_content" |
10 |
android:orientation = "horizontal" > |
11 |
< Button |
12 |
android:id = "@+id/showInfo" |
13 |
android:layout_width = "wrap_content" |
14 |
android:layout_height = "wrap_content" |
15 |
android:layout_weight = "2" |
16 |
android:text = "Network" |
17 |
></ Button > |
18 |
< Button |
19 |
android:id = "@+id/setCMWAP" |
20 |
android:layout_width = "wrap_content" |
21 |
android:layout_height = "wrap_content" |
22 |
android:layout_weight = "1" |
23 |
android:text = "WAP" |
24 |
></ Button > |
25 |
< Button |
26 |
android:id = "@+id/setGPRS" |
27 |
android:layout_width = "wrap_content" |
28 |
android:layout_height = "wrap_content" |
29 |
android:layout_weight = "1" |
30 |
android:text = "GPRS" |
31 |
></ Button > |
32 |
</ LinearLayout > |
33 |
< ScrollView |
34 |
android:layout_width = "fill_parent" |
35 |
android:layout_height = "wrap_content" > |
36 |
< TextView |
37 |
android:id = "@+id/infoPanel" |
38 |
android:layout_width = "fill_parent" |
39 |
android:layout_height = "wrap_content" |
40 |
/> |
41 |
</ ScrollView > |
42 |
</ LinearLayout > |
01 |
<? xml version = "1.0" encoding = "utf-8" ?> |
02 |
< manifest xmlns:android = "http://schemas.android.com/apk/res/android" |
03 |
package = "lab.sodino.network" android:versionCode = "1" |
04 |
android:versionName = "1.0" > |
05 |
< application android:icon = "@drawable/icon" android:label = "@string/app_name" > |
06 |
< activity android:label = "@string/app_name" android:name = ".NetworkAct" > |
07 |
< intent-filter > |
08 |
< action android:name = "android.intent.action.MAIN" /> |
09 |
< category android:name = "android.intent.category.LAUNCHER" /> |
10 |
</ intent-filter > |
11 |
</ activity > |
12 |
</ application > |
13 |
< uses-sdk android:minSdkVersion = "4" /> |
14 |
<!-- 查看网络信息时需要以下权限 --> |
15 |
< uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" ></ uses-permission > |
16 |
< uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" ></ uses-permission > |
17 |
<!-- 设置APN时需要上面的ACCESS_NETWORK_STATE及以下权限 --> |
18 |
< uses-permission android:name = "android.permission.WRITE_APN_SETTINGS" ></ uses-permission > |
19 |
< uses-permission android:name = "android.permission.INTERNET" ></ uses-permission > |
20 |
<!-- 设置网络类型时将要使用 --> |
21 |
< uses-permission android:name = "android.permission.CHANGE_NETWORK_STATE" ></ uses-permission > |
22 |
</ manifest > |