android開發網路-九游会j9娱乐平台
❶ android開發中,如何測當前網速
原理: 到網上找個可以下載的apk 的url,記住apk不要過大一般1m足夠了.然後通過記錄下載這個apk的時間和大小,算出當前網速.當然一個url並不是很准確,要求精確的可以多下載幾個
url求平均值.
package com.panodic.settings.net;
import java.io.bufferedreader;
import java.io.file;
import java.io.filenotfoundexception;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.io.inputstream;
import java.io.inputstreamreader;
import java.net.httpurlconnection;
import java.net.malformedurlexception;
import java.net.url;
import java.net.urlconnection;
import com.panodic.settings.util.logutil;
import com.panodic.settings.util.netutil;
import com.panodic.settings.util.util;
import com.panodic.settings.view.patchitem;
import android.os.bundle;
import android.os.handler;
import android.os.message;
import android.app.activity;
import android.view.menu;
import android.view.view;
import android.view.view.onclicklistener;
import android.view.window;
import android.widget.button;
import android.widget.progressbar;
import android.widget.textview;
import android.widget.toast;
import com.panodic.settings.r;
public class mesurespeed extends activity implements onclicklistener {
private static final int loading = 0x111;
private static final int stop = 0x112;
private progressbar mbar;
private int mprogressstate;
private textview mspeed;
private button mmeasurespeed;
private patchitem mback;
private float mspeedcontent;
private string maddr = "http://cdn.market.hiapk.com/data/upload/2012/12_09/22/cn.lgx.phoneexpert_221804.apk";
private string maddr2 = "http://gdown..com/data/wisegame/6f9153d4a8d1f7d8/qq.apk";
private string maddr3 = "http://gdown..com/data/wisegame/search_android_10189_1399k.apk";
private handler mhandler = new handler(util.staskrunner.getlooper());
private int testcount = 0;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
requestwindowfeature(window.feature_no_title);
setcontentview(r.layout.activity_mesure_speed);
mspeed = (textview) findviewbyid(r.id.speed_content);
mmeasurespeed = (button) findviewbyid(r.id.mesure_speed);
mback = (patchitem) findviewbyid(r.id.patch_settings_net_speed);
mbar = (progressbar) findviewbyid(r.id.bar);
mmeasurespeed.setonclicklistener(this);
mback.setonclicklistener(this);
testcount = 0;
}
@override
public void onclick(view v) {
if (mback.ismychild(v)) {
util.finish(this);
} else if (v == mmeasurespeed) {
mmeasurespeed.setenabled(false);
mbar.setvisibility(view.visible);
mprogressstate = 0;
testcount = 0;
mbar.setprogress(mprogressstate);
mhandler.removecallbacks(null);
mhandler.postdelayed(new runnable() {
@override
public void run() {
measurespeed(maddr);
}
}, 0);
}
}
private handler mprogresshandler = new handler() {
@override
public void handlemessage(message msg) {
switch (msg.what) {
case loading:
mbar.setprogress(mprogressstate);
break;
case stop:
mbar.setvisibility(view.gone);
setspeed();
mmeasurespeed.setenabled(true);
break;
default:
break;
}
}
};
private void setspeed() {
if (mspeedcontent >= 1024) {
mspeedcontent = (float) ((mspeedcontent) / (1024 0.0));
mspeedcontent = (float) (((int) (mspeedcontent * 10) % 10 0.0) / 10 (int) mspeedcontent);
mspeed.settext(mspeedcontent getstring(r.string.m));
} else {
mspeed.settext((int) mspeedcontent getstring(r.string.kb));
}
}
private void measurespeed(string httpurl) {
if (!netutil.iswificonnected(this) && !netutil.iswireconnected(this)) {
toast.maketext(this, getstring(r.string.no_net), toast.length_short)
.show();
mprogresshandler.sendemptymessage(stop);
return;
}
int filelen = 0;
long starttime = 0;
long endtime = 0;
final string filename = "tmp.apk";
httpurlconnection conn = null;
inputstream is = null;
fileoutputstream fos = null;
file tmpfile = new file("/sdcard/temp");
if (!tmpfile.exists()) {
tmpfile.mkdir();
}
final file file = new file("/sdcard/temp/" filename);
try {
url url = new ;
try {
conn = (httpurlconnection) url.openconnection();
logutil.d("lening");
filelen = conn.getcontentlength();
logutil.d("len=" filelen);
if (filelen <= 0) {
mspeedcontent = 0;
mprogresshandler.sendemptymessage(stop);
toast.maketext(this, getstring(r.string.conn_fail),
toast.length_short).show();
return;
}
starttime = system.currenttimemillis();
is = conn.getinputstream();
fos = new fileoutputstream(file);
byte[] buf = new byte[256];
conn.connect();
if (conn.getresponsecode() >= 400) {
toast.maketext(this, getstring(r.string.no_time),
toast.length_short).show();
mprogresshandler.sendemptymessage(stop);
return;
} else {
while (true) {
if (is != null) {
int numread = is.read(buf);
if (numread <= 0) {
break;
} else {
fos.write(buf, 0, numread);
}
mprogressstate = (int) (((numread 0.0) / (filelen 0.0)) * 1000000);
mprogresshandler.sendemptymessage(loading);
// logutil.d("numread=" numread " filelen="
// filelen);
} else {
break;
}
}
}
endtime = system.currenttimemillis();
} catch (ioexception e) {
e.printstacktrace();
toast.maketext(this, getstring(r.string.no_permission),
toast.length_short).show();
} finally {
if (conn != null) {
conn.disconnect();
}
try {
if (fos != null) {
fos.close();
}
if (is != null) {
is.close();
}
} catch (ioexception e1) {
e1.printstacktrace();
}
}
} catch (malformedurlexception e) {
e.printstacktrace();
}
mspeedcontent = filelen / (endtime - starttime);
mprogresshandler.sendemptymessage(stop);
}
}
❷ android 開發的socket程序的網路問題
1、用wlan的時候,你的手機與pc相同於同一個區域網,所以肯定能通信的。
2、手機用gprs後,由於是兩個不同的網路,而你的伺服器ip地址如果是接上路由(包括無線)的
上的,那麼你的ip不是對外的ip,只是對路由的ip,這只是一個不行的原因
3、你可以網路ip地址查詢,就可以看到你的真正的ip,即對外的ip,即便你用的是對外的ip,這里還是不得,原因是你這個ip的路由下可能還有其他機子,這種情況從外面連的通信就不知道要發往哪台伺服器
4、要解決這個問題,你可以嘗試下花生殼綁定你的主機,具體做法你可以網上搜索下。
歡迎有問題繼續提問,滿意請採納,謝謝!
❸ android開發如何使用代碼配置手機wifi的pac地址
這里用到的手機型號為魅族m6120,其中的具體步驟如下:
1、打開手機的設置界面,需要選擇無線網路這一項。
❹ 如何在android開發中用httpclient連接網路數據
httpclient網路訪問
一、httpclient網路訪問:
(一)、簡介:
1、apache組織提供了httpclient項目,可以實現網路訪問。在android中,成功集成了httpclient,所以在android中可以直接使用httpclient訪問網路。
2、與httpurlconnection相比,httpclient將前者中的輸入、輸出流操作,統一封裝成httpget、httppost、httprequest類。
httpclient:網路連接對象;
httpget:代表發送get請求;
httppost:代表發送post請求;
httpresponse:代表處理伺服器響應的對象。
httpentity對象:該對象中包含了伺服器所有的返回內容。
3、使用步驟:(六部曲)【重點】
創建httpclient對象:通過實例化defaulthttpclient獲得;
創建httpget或httppost對象:通過實例化 httpget或httppost 獲得,而構造方法的參數是urlstring(即需要訪問的網路url地址)。也可以通過調用setparams()方法來添加請求參數;
調用httpclient對象的execute()方法,參數是剛才創建的 httpget或httppost對象 ,返回值是httpresponse對象;
通過response對象中的getstatusline()方法和getstatuscode()方法獲取伺服器響應狀態是否是200。
調用 httpresponse對象的getentity()方法,返回httpentity對象。而該對象中包含了伺服器所有的返回內容。
藉助entityutils的tostring()方法或tobytearray()對 httpentity對象進行處理,也可以通過io流對 httpentity對象進行操作。
(二)、封裝httpclienthelper工具類:
public class httpclienthelper {
public static httpclient checknetwork(string url) {
httpclient httpclient = new defaulthttpclient();
httpget request = new httpget(url);
httpresponse httpresponse = null;
try {
httpresponse = httpclient.execute(request);
if (httpresponse.getstatusline().getstatuscode() == 200) {
return httpclient;
}
} catch (clientprotocolexception e) {
e.printstacktrace();
} catch (ioexception e) {
e.printstacktrace();
}
return null;
}
/**
* 作用:實現網路訪問文件,將獲取到數據儲存在文件流中
*
* @param url
* :訪問網路的url地址
* @return inputstream
*/
public static inputstream loadfilefrom {
httpclient httpclient = new defaulthttpclient();
httpget requestget = new httpget(url);
httpresponse httpresponse;
try {
httpresponse = httpclient.execute(requestget);
if (httpresponse.getstatusline().getstatuscode() == 200) {
httpentity entity = httpresponse.getentity();
return entity.getcontent();
}
} catch (exception e) {
e.printstacktrace();
}
return null;
}
/**
* 作用:實現網路訪問文件,將獲取到的數據存在位元組數組中
*
* @param url
* :訪問網路的url地址
* @return byte[]
*/
public static byte[] loadbytefrom {
httpclient httpclient = new defaulthttpclient();
httpget requestget = new httpget(url);
try {
httpresponse httpresponse = httpclient.execute(requestget);
if (httpresponse.getstatusline().getstatuscode() == 200) {
httpentity httpentity = httpresponse.getentity();
return entityutils.tobytearray(httpentity);
}
} catch (exception e) {
e.printstacktrace();
system.out.println("====>" e.tostring());
}
return null;
}
/**
* 作用:實現網路訪問文件,返回字元串
*
* @param url
* :訪問網路的url地址
* @return string
*/
public static string loadtextfrom {
httpclient httpclient = new defaulthttpclient();
httpget requestget = new httpget(url);
try {
httpresponse httpresponse = httpclient.execute(requestget);
if (httpresponse.getstatusline().getstatuscode() == 200) {
httpentity httpentity = httpresponse.getentity();
return entityutils.tostring(httpentity, "utf-8");
}
} catch (exception e) {
e.printstacktrace();
}
return null;
}
/**
* 作用:實現網路訪問文件,先給伺服器通過「get」方式提交數據,再返回相應的數據
*
* @param url
* :訪問網路的url地址
* @param params
* string url:訪問url時,需要傳遞給伺服器的參數。
* 第二個參數格式為:username=wangxiangjun&password=123456
* @return byte[]
*/
public static byte[] dogetsubmit(string url, string params) {
httpclient httpclient = new defaulthttpclient();
httpget requestget = new httpget(url "?" params);
try {
httpresponse httpresponse = httpclient.execute(requestget);
if (httpresponse.getstatusline().getstatuscode() == 200) {
httpentity httpentity = httpresponse.getentity();
return entityutils.tobytearray(httpentity);
}
} catch (exception e) {
e.printstacktrace();
}
return null;
}
/**
* 作用:實現網路訪問文件,先給伺服器通過「post」方式提交數據,再返回相應的數據
*
* @param url
* :訪問網路的url地址
* @param params
* string url:訪問url時,需要傳遞給伺服器的參數。 第二個參數為:list
* @return byte[]
*/
public static byte[] dopostsubmit(string url, list
httpclient httpclient = new defaulthttpclient();
httppost requestpost = new httppost(url);
try {
requestpost.setentity(new urlencodedformentity(params, "utf-8"));
httpresponse httpresponse = httpclient.execute(requestpost);
if (httpresponse.getstatusline().getstatuscode() == 200) {
httpentity httpentity = httpresponse.getentity();
return entityutils.tobytearray(httpentity);
}
} catch (exception e) {
e.printstacktrace();
}
return null;
}
/**
* 作用:實現網路訪問文件,先給伺服器通過「post」方式提交數據,再返回相應的數據
*
* @param url
* :訪問網路的url地址
* @param params
* string url:訪問url時,需要傳遞給伺服器的參數。 map
* @return byte[]
*/
public static byte[] dopostsubmit(string url, map
httpclient httpclient = new defaulthttpclient();
httppost requestpost = new httppost(url);
list
try {
if (params != null) {
for (map.entry
string key = entry.getkey();
string value = entry.getvalue().tostring();
basicnamevaluepair namevaluepair = new basicnamevaluepair(
key, value);
parameters.add(namevaluepair);
}
}
requestpost
.setentity(new urlencodedformentity(parameters, "utf-8"));
httpresponse httpresponse = httpclient.execute(requestpost);
if (httpresponse.getstatusline().getstatuscode() == 200) {
httpentity httpentity = httpresponse.getentity();
return entityutils.tobytearray(httpentity);
}
} catch (exception e) {
e.printstacktrace();
}
return null;
}
}
❺ 如何在android開發中用httpclient連接網路數據
1.構造完整的url
❻ android網路 | url和urlconnection詳解及其實戰案例
url和urlconnection是android網路編程中的兩個核心概念。url,全稱為統一資源定位符,是一種標記網路資源的字元串。它可以描述文件、目錄、資料庫查詢結果等各種資源的位置。例如,`http://www.onee.cn/index.htm`是一個典型的url,由協議、主機、埠和資源路徑組成。
urlconnection和httpurlconnection是實現與url資源通信的兩個類。urlconnection是一個抽象類,提供了一種與url所指向的遠程對象建立連接的方法。httpurlconnection是urlconnection的一個子類,專用於處理http協議的請求和響應。
url類提供了創建url對象的多個構造器,並允許執行多種操作來訪問該url對應的資源。例如,調用`openconnection()`方法可以獲取一個urlconnection對象,該對象表示到url所引用資源的連接。通過urlconnection,應用程序可以發送http請求,讀取響應數據,或訪問響應頭欄位。
在實踐案例中,我們可以通過url類來獲取網路資源,比如使用inetaddress的簡單用法來解析域名。此外,url類還支持字元和mime字元的轉換,確保編碼和解碼的一致性,以防止數據丟失或錯誤。
httpurlconnection提供了實現網路通信的四個主要功能:創建url、獲取網頁數據、設置超時、判斷響應碼、讀取輸入流以及輸出文件流。這些操作使得http請求的發送和接收更加靈活和高效。例如,在發送post請求時,需要使用urlconnection的輸出流來發送參數。通過設置連接的特性,如超時、緩存、連接方式、文件編碼、長度和類型,可以優化網路請求的性能和可靠性。
在實際應用中,android開發者通常會利用第三方庫(如okhttp)來處理http請求,以簡化網路操作並提高性能。然而,直接使用android提供的httpurlconnection進行網路操作時,需要注意一些特定的注意事項,例如避免在有外部域名跳轉的場景中使用自動跟隨跳轉功能,以防止域名解析異常等問題。
最後,通過使用httpurlconnection,我們可以在android應用中實現網路圖片的載入與顯示。在子線程中執行網路請求,獲取圖片數據,將其轉換為bitmap格式,並在主線程中更新ui界面,實現流暢的圖片顯示效果。
通過這些實例和詳細說明,可以深入理解url和urlconnection在android網路編程中的應用,以及如何在實際項目中實現高效、可靠的網路請求和響應處理。