package
com.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
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 org.json.JSONStringer;
import android.content.Context;
import android.telephony.NeighboringCellInfo;
import android.telephony.TelephonyManager;
public class Location {
public static String LOCATIONS_URL = " http://www.google.com/loc/json " ;
public static String getLocations(Context context) {
// generate json request
String jr = generateJsonRequest(context);
try {
DefaultHttpClient client = new DefaultHttpClient();
StringEntity entity = new StringEntity(jr);
HttpPost httpost = new HttpPost(LOCATIONS_URL);
httpost.setEntity(entity);
HttpResponse response = client.execute(httpost);
String locationsJSONString = getStringFromHttp(response.getEntity());
return extractLocationsFromJsonString(locationsJSONString);
} catch (ClientProtocolException e) {
// e.printStackTrace();
} catch (IOException e) {
// e.printStackTrace();
} catch (Exception e) {
// e.printStackTrace();
}
return null ;
}
private static String extractLocationsFromJsonString(String jsonString) {
String country = "" ;
String region = "" ;
String city = "" ;
String street = "" ;
String street_number = "" ;
double latitude = 0.0 ;
double longitude = 0.0 ;
// "accuracy":901.0
double accuracy = 0.0 ;
try {
JSONObject jo = new JSONObject(jsonString);
JSONObject location = (JSONObject) jo.get( " location " );
latitude = (Double) location.get( " latitude " );
longitude = (Double) location.get( " longitude " );
accuracy = (Double) location.get( " accuracy " );
JSONObject address = (JSONObject) location.get( " address " );
country = (String) address.get( " country " );
region = (String) address.get( " region " );
city = (String) address.get( " city " );
street = (String) address.get( " street " );
street_number = (String) address.get( " street_number " );
} catch (JSONException e) {
// e.printStackTrace();
}
return " ( " + latitude + " , " + longitude + " )\t " + country + region + city
+ street + street_number + " \t " + " 精确度: " + accuracy;
}
// 获取所有的网页信息以String 返回
private static String getStringFromHttp(HttpEntity entity) {
StringBuffer buffer = new StringBuffer();
try {
// 获取输入流
BufferedReader reader = new BufferedReader( new InputStreamReader(
entity.getContent()));
// 将返回的数据读到buffer中
String temp = null ;
while ((temp = reader.readLine()) != null ) {
buffer.append(temp);
}
} catch (IllegalStateException e) {
// e.printStackTrace();
} catch (IOException e) {
// e.printStackTrace();
}
return buffer.toString();
}
private static String generateJsonRequest(Context context) {
TelephonyManager manager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
List < NeighboringCellInfo > cellList = manager.getNeighboringCellInfo();
if (cellList.size() == 0 )
return null ;
JSONStringer js = new JSONStringer();
try {
js.object();
js.key( " version " ).value( " 1.1.0 " );
js.key( " host " ).value( " maps.google.com " );
js.key( " home_mobile_country_code " ).value( 460 );
js.key( " home_mobile_network_code " ).value( 0 );
js.key( " radio_type " ).value( " gsm " );
js.key( " request_address " ).value( true );
js.key( " address_language " ).value( " zh_CN " );
JSONArray ct = new JSONArray();
for (NeighboringCellInfo info : cellList) {
JSONObject c = new JSONObject();
c.put( " cell_id " , info.getCid());
c.put( " location_area_code " , info.getLac());
c.put( " mobile_country_code " , 460 );
c.put( " mobile_network_code " , 0 );
c.put( " signal_strength " , info.getRssi()); // 获取邻居小区信号强度
ct.put(c);
}
js.key( " cell_towers " ).value(ct);
js.endObject();
} catch (JSONException e) {
// e.printStackTrace();
return null ;
}
return js.toString().replace( " true " , " True " );
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
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 org.json.JSONStringer;
import android.content.Context;
import android.telephony.NeighboringCellInfo;
import android.telephony.TelephonyManager;
public class Location {
public static String LOCATIONS_URL = " http://www.google.com/loc/json " ;
public static String getLocations(Context context) {
// generate json request
String jr = generateJsonRequest(context);
try {
DefaultHttpClient client = new DefaultHttpClient();
StringEntity entity = new StringEntity(jr);
HttpPost httpost = new HttpPost(LOCATIONS_URL);
httpost.setEntity(entity);
HttpResponse response = client.execute(httpost);
String locationsJSONString = getStringFromHttp(response.getEntity());
return extractLocationsFromJsonString(locationsJSONString);
} catch (ClientProtocolException e) {
// e.printStackTrace();
} catch (IOException e) {
// e.printStackTrace();
} catch (Exception e) {
// e.printStackTrace();
}
return null ;
}
private static String extractLocationsFromJsonString(String jsonString) {
String country = "" ;
String region = "" ;
String city = "" ;
String street = "" ;
String street_number = "" ;
double latitude = 0.0 ;
double longitude = 0.0 ;
// "accuracy":901.0
double accuracy = 0.0 ;
try {
JSONObject jo = new JSONObject(jsonString);
JSONObject location = (JSONObject) jo.get( " location " );
latitude = (Double) location.get( " latitude " );
longitude = (Double) location.get( " longitude " );
accuracy = (Double) location.get( " accuracy " );
JSONObject address = (JSONObject) location.get( " address " );
country = (String) address.get( " country " );
region = (String) address.get( " region " );
city = (String) address.get( " city " );
street = (String) address.get( " street " );
street_number = (String) address.get( " street_number " );
} catch (JSONException e) {
// e.printStackTrace();
}
return " ( " + latitude + " , " + longitude + " )\t " + country + region + city
+ street + street_number + " \t " + " 精确度: " + accuracy;
}
// 获取所有的网页信息以String 返回
private static String getStringFromHttp(HttpEntity entity) {
StringBuffer buffer = new StringBuffer();
try {
// 获取输入流
BufferedReader reader = new BufferedReader( new InputStreamReader(
entity.getContent()));
// 将返回的数据读到buffer中
String temp = null ;
while ((temp = reader.readLine()) != null ) {
buffer.append(temp);
}
} catch (IllegalStateException e) {
// e.printStackTrace();
} catch (IOException e) {
// e.printStackTrace();
}
return buffer.toString();
}
private static String generateJsonRequest(Context context) {
TelephonyManager manager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
List < NeighboringCellInfo > cellList = manager.getNeighboringCellInfo();
if (cellList.size() == 0 )
return null ;
JSONStringer js = new JSONStringer();
try {
js.object();
js.key( " version " ).value( " 1.1.0 " );
js.key( " host " ).value( " maps.google.com " );
js.key( " home_mobile_country_code " ).value( 460 );
js.key( " home_mobile_network_code " ).value( 0 );
js.key( " radio_type " ).value( " gsm " );
js.key( " request_address " ).value( true );
js.key( " address_language " ).value( " zh_CN " );
JSONArray ct = new JSONArray();
for (NeighboringCellInfo info : cellList) {
JSONObject c = new JSONObject();
c.put( " cell_id " , info.getCid());
c.put( " location_area_code " , info.getLac());
c.put( " mobile_country_code " , 460 );
c.put( " mobile_network_code " , 0 );
c.put( " signal_strength " , info.getRssi()); // 获取邻居小区信号强度
ct.put(c);
}
js.key( " cell_towers " ).value(ct);
js.endObject();
} catch (JSONException e) {
// e.printStackTrace();
return null ;
}
return js.toString().replace( " true " , " True " );
}
}