想达到一种不刷新整个listview 只刷新信号强度这一行的。请各位牛人,帮忙解答,本人急切盼望这个人的出现。
package android.emou.activity.main.menu;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.emou.activity.R;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.telephony.PhoneStateListener;
import android.telephony.SignalStrength;
import android.telephony.TelephonyManager;
import android.telephony.gsm.GsmCellLocation;
import android.widget.SimpleAdapter;
/**
*
* @author Administrator
*
*/
public class PhonestateActivity extends ListActivity {
TelephonyManager tm;
//MyPhoneStateListener类的对象,即设置一个监听器对象
MyPhoneStateListener MyListener;
//asu
int asuValue;
//dBm
int dBmValue;
List<Map<String, Object>> list = null;
GsmCellLocation gsmCellLocation;
LocationManager locationManager;
SimpleAdapter adapter;
//经度
double jingdu;
//纬度
double weidu;
private Handler handler;
private ProgressDialog loadingBar;
private final static int FINISH = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyListener = new MyPhoneStateListener();
tm= (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
tm.listen(MyListener ,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
gsmCellLocation=(GsmCellLocation) tm.getCellLocation();
// updateUI();
//初始化对象
// JSONObject lojsJsonObject=(JSONObject) getLocation();
// try {
// //纬度
// weidu=lojsJsonObject.getDouble("latitude");
// //经度
// jingdu=lojsJsonObject.getDouble("longitude");
// } catch (JSONException e) {
// e.printStackTrace();
// }
// loadingBar = new ProgressDialog(this);
// loadingBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// loadingBar.setTitle("请稍等");
// loadingBar.setMessage("数据正在加载中...");
// loadingBar.show();
// handler = new Handler() {
// @Override
// public void handleMessage(Message msg) {
// if(msg.what == FINISH){
// System.out.println("-----------------------------------------");
// loadingBar.dismiss();
// }
// }
// };
}
private void updateUI(){
Thread thred = new Thread(){
public void run() {
changeView();
handler.sendEmptyMessage(FINISH);
}
};
thred.start();
}
private void changeView(){
adapter = new SimpleAdapter(this,getData(),R.layout.vlist,
new String[]{"title","info","img"},
new int[]{R.id.title,R.id.info});
setListAdapter(adapter);
}
@Override
protected void onPause() {
super.onPause();
tm.listen(MyListener, PhoneStateListener.LISTEN_NONE);
}
@Override
protected void onResume() {
super.onResume();
tm.listen(MyListener,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
}
private List<Map<String, Object>> getData() {
list = new ArrayList<Map<String, Object>>();
Map<String, Object> SimOperatorNamemap = new HashMap<String, Object>();
SimOperatorNamemap.put("title", "服务商名称");
if (tm.getSubscriberId().substring(3, 5).equals("00")) {
SimOperatorNamemap.put("info", "中国移动");
}
if (tm.getSubscriberId().substring(3, 5).equals("02")) {
SimOperatorNamemap.put("info", "中国移动");
}
if (tm.getSubscriberId().substring(3, 5).equals("01")) {
SimOperatorNamemap.put("info", "中国联通");
}
if (tm.getSubscriberId().substring(3, 5).equals("03")) {
SimOperatorNamemap.put("info", "中国电信");
}
list.add(SimOperatorNamemap);
Map<String, Object> NetworkTypemap = new HashMap<String, Object>();
// NETWORK_TYPE_UNKNOWN 网络类型未知 0
// * NETWORK_TYPE_GPRS GPRS网络1
// * NETWORK_TYPE_EDGE EDGE网络 2
// * NETWORK_TYPE_UMTS UMTS网络 3
// * NETWORK_TYPE_HSDPA HSDPA网络 8
// * NETWORK_TYPE_HSUPA HSUPA网络 9
// * NETWORK_TYPE_HSPA HSPA网络 10
// * NETWORK_TYPE_CDMA CDMA网络,IS95A 或 IS95B. 4
// * NETWORK_TYPE_EVDO_0 EVDO网络, revision 0. 5
// * NETWORK_TYPE_EVDO_A EVDO网络, revision A. 6
// * NETWORK_TYPE_1xRTT 1xRTT网络 7
NetworkTypemap.put("title", "网络类型");
switch (tm.getNetworkType()) {
case 0:
NetworkTypemap.put("info", "未知");
break;
case 1:
NetworkTypemap.put("info", "GPRS网络");
break;
case 2:
NetworkTypemap.put("info", "EDGE网络");
break;
case 3:
NetworkTypemap.put("info", " UMTS网络");
break;
case 4:
NetworkTypemap.put("info", "DMA网络,IS95A 或 IS95B");
break;
case 5:
NetworkTypemap.put("info", "EVDO网络, revision 0");
break;
case 6:
NetworkTypemap.put("info", "EVDO网络, revision A");
case 7:
NetworkTypemap.put("info", "1xRTT网络 ");
break;
case 8:
NetworkTypemap.put("info", " HSDPA网络");
break;
case 9:
NetworkTypemap.put("info", "HSUPA网络");
break;
case 10:
NetworkTypemap.put("info","HSPA网络");
default:
break;
}
list.add(NetworkTypemap);
Map<String, Object> asumap = new HashMap<String, Object>();
asumap.put("title", "信号强度");
asumap.put("info", String.valueOf(asuValue)+"asu"+" "+String.valueOf(dBmValue)+"dBm" );
list.add(asumap);
Map<String, Object> cidMap=new HashMap<String, Object>();
cidMap.put("title", "小区号");
cidMap.put("info", gsmCellLocation.getCid());
list.add(cidMap);
Map<String, Object> lacMap=new HashMap<String, Object>();
lacMap.put("title", "LAC号");
lacMap.put("info", gsmCellLocation.getLac());
list.add(lacMap);
Map<String, Object> mccMap=new HashMap<String, Object>();
mccMap.put("title", "MCC");
mccMap.put("info", tm.getSubscriberId().substring(0,3));
list.add(mccMap);
Map<String, Object> mncMap=new HashMap<String, Object>();
mncMap.put("title", "MNC");
mncMap.put("info", tm.getSubscriberId().substring(3, 5));
list.add(mncMap);
// Map<String, Object> jingduMap=new HashMap<String, Object>();
// jingduMap.put("title", "经度");
// jingduMap.put("info",jingdu);
// list.add(jingduMap);
//
// Map<String, Object> weiduMap=new HashMap<String, Object>();
// weiduMap.put("title", "纬度");
// weiduMap.put("info",weidu);
// list.add(weiduMap);
Map<String, Object> NetworkRoamingmap = new HashMap<String, Object>();
NetworkRoamingmap.put("title", "漫游状态");
if (tm.isNetworkRoaming()) {
NetworkRoamingmap.put("info", "漫游");
}else{
NetworkRoamingmap.put("info", "非漫游");
}
list.add(NetworkRoamingmap);
Map<String, Object> Line1Numbermap = new HashMap<String, Object>();
Line1Numbermap.put("title", "手机号");
if (tm.getLine1Number().equals("") || tm.getLine1Number()=="") {
Line1Numbermap.put("info", "未知");
}else{
Line1Numbermap.put("info", tm.getLine1Number());
}
list.add(Line1Numbermap);
Map<String, Object> SimSerialNumbermap = new HashMap<String, Object>();
SimSerialNumbermap.put("title", "sim卡序列号");
SimSerialNumbermap.put("info", tm.getSimSerialNumber());
list.add(SimSerialNumbermap);
Map<String, Object> xinghaomap=new HashMap<String, Object>();
xinghaomap.put("title", "手机型号");
xinghaomap.put("info", android.os.Build.MODEL);
list.add(xinghaomap);
Map<String, Object> androidvermap=new HashMap<String, Object>();
androidvermap.put("title", "android版本号");
androidvermap.put("info", android.os.Build.VERSION.RELEASE);
list.add(androidvermap);
Map<String, Object> DeviceIdmap = new HashMap<String, Object>();
DeviceIdmap.put("title", "IMEI");
DeviceIdmap.put("info", tm.getDeviceId());
list.add(DeviceIdmap);
Map<String, Object> imsiMap=new HashMap<String, Object>();
imsiMap.put("title", "IMSI");
imsiMap.put("info", tm.getSubscriberId());
list.add(imsiMap);
return list;
}
//监听器类
private class MyPhoneStateListener extends PhoneStateListener{
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength){
super.onSignalStrengthsChanged(signalStrength);//调用超类的该方法,在网络信号变化时得到回答信号
asuValue=signalStrength.getGsmSignalStrength();
dBmValue=-113+2*asuValue;
// getData().get(2).remove("info");
// getData().get(2).put("info", String.valueOf(asuValue)+"asu"+" "+String.valueOf(dBmValue)+"dBm");
// Map<String, Object> asumap = new HashMap<String, Object>();
changeView();
}
}
//获取位置的json串
public Object getLocation()
{
TelephonyManager mTManager=null;
mTManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation gcl = (GsmCellLocation) mTManager.getCellLocation();
int cid = gcl.getCid();
int lac = gcl.getLac();
int mcc = Integer.valueOf(mTManager.getNetworkOperator().substring(0,3));
int mnc = Integer.valueOf(mTManager.getNetworkOperator().substring(3,5));
JSONObject jObject = new JSONObject();
try {
jObject.put("version", "1.1.0");
jObject.put("host", "maps.google.com");
jObject.put("request_address", true);
if (mcc == 460)
{
jObject.put("address_language", "zh_CN");
} else {
jObject.put("address_language", "en_US");
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JSONArray jArray = new JSONArray();
JSONObject jData = new JSONObject();
try {
jData.put("cell_id", cid);
jData.put("location_area_code", lac);
jData.put("mobile_country_code", mcc);
jData.put("mobile_network_code", mnc);
jArray.put(jData);
jObject.put("cell_towers", jArray);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.google.com/loc/json");
StringEntity se;
try {
System.out.println(jObject.toString());
se = new StringEntity(jObject.toString());
post.setEntity(se);
HttpResponse resp = client.execute(post);
BufferedReader br = null;
System.out.println("resp:"+resp.getStatusLine().getStatusCode());
if (resp.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
{
br = new BufferedReader(new InputStreamReader(resp.getEntity().getContent()));
}
StringBuffer sb = new StringBuffer();
String result = br.readLine();
while (result != null) {
sb.append(result);
result = br.readLine();
}
JSONObject sbJsonObject=new JSONObject(sb.toString());
JSONObject lojsJsonObject=sbJsonObject.getJSONObject("location");
return lojsJsonObject;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}
http://www.iteye.com/problems/77132