首页 > 系统 > Android > 正文

Android实现Service获取当前位置(GPS+基站)的方法

2020-04-11 11:26:03
字体:
来源:转载
供稿:网友

本文实例讲述了Android实现Service获取当前位置(GPS+基站)的方法。分享给大家供大家参考。具体如下:

需求详情:

1)、Service中每隔1秒执行一次定位操作(GPS+基站)
2)、定位的结果实时显示在界面上(要求得到经度、纬度)

技术支持:

1)、获取经纬度
通过GPS+基站获取经纬度,先通过GPS来获取,如果为空改用基站进行获取>GPS+基站(基站获取支持联通、电信、移动)。
2)、实时获取经纬度
为了达到实时获取经纬度,需在后台启动获取经纬度的Service,然后把经纬度数据通过广播发送出去,在需要的地方进行广播注册(比如在Activity中注册广播,显示在界面中)>涉及到Service+BroadcastReceiver+Activity+Thread等知识点。

备注:本文注重实践,如有看不懂的,先去巩固下知识点,可以去看看前面相关的几篇文章。

1、CellInfo实体类>基站信息

package com.ljq.activity;/** * 基站信息 *  * @author jiqinlin *  */public class CellInfo { /** 基站id,用来找到基站的位置 */ private int cellId; /** 移动国家码,共3位,中国为460,即imsi前3位 */ private String mobileCountryCode="460"; /** 移动网络码,共2位,在中国,移动的代码为00和02,联通的代码为01,电信的代码为03,即imsi第4~5位 */ private String mobileNetworkCode="0"; /** 地区区域码 */ private int locationAreaCode; /** 信号类型[选 gsm|cdma|wcdma] */ private String radioType=""; public CellInfo() { } public int getCellId() { return cellId; } public void setCellId(int cellId) { this.cellId = cellId; } public String getMobileCountryCode() { return mobileCountryCode; } public void setMobileCountryCode(String mobileCountryCode) { this.mobileCountryCode = mobileCountryCode; } public String getMobileNetworkCode() { return mobileNetworkCode; } public void setMobileNetworkCode(String mobileNetworkCode) { this.mobileNetworkCode = mobileNetworkCode; } public int getLocationAreaCode() { return locationAreaCode; } public void setLocationAreaCode(int locationAreaCode) { this.locationAreaCode = locationAreaCode; } public String getRadioType() { return radioType; } public void setRadioType(String radioType) { this.radioType = radioType; }}

2、Gps类>Gps封装类,用来获取经纬度

package com.ljq.activity;import android.content.Context;import android.location.Criteria;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;public class Gps{ private Location location = null; private LocationManager locationManager = null; private Context context = null; /** * 初始化  *  * @param ctx */ public Gps(Context ctx) { context=ctx; locationManager=(LocationManager)context.getSystemService(Context.LOCATION_SERVICE); location = locationManager.getLastKnownLocation(getProvider()); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener); } // 获取Location Provider private String getProvider() { // 构建位置查询条件 Criteria criteria = new Criteria(); // 查询精度:高 criteria.setAccuracy(Criteria.ACCURACY_FINE); // 是否查询海拨:否 criteria.setAltitudeRequired(false); // 是否查询方位角 : 否 criteria.setBearingRequired(false); // 是否允许付费:是 criteria.setCostAllowed(true); // 电量要求:低 criteria.setPowerRequirement(Criteria.POWER_LOW); // 返回最合适的符合条件的provider,第2个参数为true说明 , 如果只有一个provider是有效的,则返回当前provider return locationManager.getBestProvider(criteria, true); } private LocationListener locationListener = new LocationListener() { // 位置发生改变后调用 public void onLocationChanged(Location l) {  if(l!=null){  location=l;  } } // provider 被用户关闭后调用 public void onProviderDisabled(String provider) {  location=null; } // provider 被用户开启后调用 public void onProviderEnabled(String provider) {  Location l = locationManager.getLastKnownLocation(provider);  if(l!=null){  location=l;  } } // provider 状态变化时调用 public void onStatusChanged(String provider, int status, Bundle extras) { } }; public Location getLocation(){ return location; } public void closeLocation(){ if(locationManager!=null){  if(locationListener!=null){  locationManager.removeUpdates(locationListener);  locationListener=null;  }  locationManager=null; } }}

3、GpsService服务类

package com.ljq.activity;import java.util.ArrayList;import android.app.Service;import android.content.Intent;import android.location.Location;import android.os.IBinder;import android.util.Log;public class GpsService extends Service { ArrayList<CellInfo> cellIds = null; private Gps gps=null; private boolean threadDisable=false;  private final static String TAG=GpsService.class.getSimpleName(); @Override public void onCreate() { super.onCreate(); gps=new Gps(GpsService.this); cellIds=UtilTool.init(GpsService.this); new Thread(new Runnable(){  @Override  public void run() {  while (!threadDisable) {    try {   Thread.sleep(1000);   } catch (InterruptedException e) {   e.printStackTrace();   }   if(gps!=null){ //当结束服务时gps为空   //获取经纬度   Location location=gps.getLocation();   //如果gps无法获取经纬度,改用基站定位获取   if(location==null){    Log.v(TAG, "gps location null");     //2.根据基站信息获取经纬度    try {    location = UtilTool.callGear(GpsService.this, cellIds);    } catch (Exception e) {    location=null;    e.printStackTrace();    }    if(location==null){    Log.v(TAG, "cell location null");     }   }   //发送广播   Intent intent=new Intent();   intent.putExtra("lat", location==null?"":location.getLatitude()+"");    intent.putExtra("lon", location==null?"":location.getLongitude()+"");    intent.setAction("com.ljq.activity.GpsService");    sendBroadcast(intent);   }  }  } }).start(); } @Override public void onDestroy() { threadDisable=true; if(cellIds!=null&&cellIds.size()>0){  cellIds=null; } if(gps!=null){  gps.closeLocation();  gps=null; } super.onDestroy(); } @Override public IBinder onBind(Intent arg0) { return null; }}

4、GpsActivity>在界面上实时显示经纬度数据

package com.ljq.activity;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.location.Location;import android.location.LocationManager;import android.os.Bundle;import android.util.Log;import android.widget.EditText;import android.widget.Toast;public class GpsActivity extends Activity { private Double homeLat=26.0673834d; //宿舍纬度 private Double homeLon=119.3119936d; //宿舍经度 private EditText editText = null; private MyReceiver receiver=null;  private final static String TAG=GpsActivity.class.getSimpleName(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); editText=(EditText)findViewById(R.id.editText); //判断GPS是否可用 Log.i(TAG, UtilTool.isGpsEnabled((LocationManager)getSystemService(Context.LOCATION_SERVICE))+""); if(!UtilTool.isGpsEnabled((LocationManager)getSystemService(Context.LOCATION_SERVICE))){  Toast.makeText(this, "GSP当前已禁用,请在您的系统设置屏幕启动。", Toast.LENGTH_LONG).show();  Intent callGPSSettingIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);   startActivity(callGPSSettingIntent);      return; }   //启动服务 startService(new Intent(this, GpsService.class)); //注册广播 receiver=new MyReceiver(); IntentFilter filter=new IntentFilter(); filter.addAction("com.ljq.activity.GpsService"); registerReceiver(receiver, filter); } //获取广播数据 private class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) {  Bundle bundle=intent.getExtras();     String lon=bundle.getString("lon");    String lat=bundle.getString("lat");   if(lon!=null&&!"".equals(lon)&&lat!=null&&!"".equals(lat)){  double distance=getDistance(Double.parseDouble(lat),    Double.parseDouble(lon), homeLat, homeLon);  editText.setText("目前经纬度/n经度:"+lon+"/n纬度:"+lat+"/n离宿舍距离:"+java.lang.Math.abs(distance));  }else{  editText.setText("目前经纬度/n经度:"+lon+"/n纬度:"+lat);  } } } @Override protected void onDestroy() { //注销服务 unregisterReceiver(receiver); //结束服务,如果想让服务一直运行就注销此句 stopService(new Intent(this, GpsService.class)); super.onDestroy(); } /** * 把经纬度换算成距离 *  * @param lat1 开始纬度 * @param lon1 开始经度 * @param lat2 结束纬度 * @param lon2 结束经度 * @return */ private double getDistance(double lat1, double lon1, double lat2, double lon2) { float[] results = new float[1]; Location.distanceBetween(lat1, lon1, lat2, lon2, results); return results[0]; } }

5、UtilTool>工具类

package com.ljq.activity;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.ProtocolException;import java.net.URL;import java.util.ArrayList;import java.util.Calendar;import java.util.List;import java.util.Locale;import org.apache.http.client.ClientProtocolException;import org.json.JSONException;import org.json.JSONObject;import android.content.Context;import android.location.Location;import android.location.LocationManager;import android.telephony.NeighboringCellInfo;import android.telephony.TelephonyManager;import android.telephony.cdma.CdmaCellLocation;import android.telephony.gsm.GsmCellLocation;import android.util.Log;import android.widget.Toast;public class UtilTool { public static boolean isGpsEnabled(LocationManager locationManager) { boolean isOpenGPS = locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER); boolean isOpenNetwork = locationManager.isProviderEnabled(android.location.LocationManager.NETWORK_PROVIDER); if (isOpenGPS || isOpenNetwork) {  return true; } return false; }   /**   * 根据基站信息获取经纬度    *    * 原理向http://www.google.com/loc/json发送http的post请求,根据google返回的结果获取经纬度   *    * @param cellIds   * @return   * @throws Exception    */  public static Location callGear(Context ctx, ArrayList<CellInfo> cellIds) throws Exception {   String result="";   JSONObject data=null;   if (cellIds == null||cellIds.size()==0) {   UtilTool.alert(ctx, "cell request param null");   return null;   }; try {  result = UtilTool.getResponseResult(ctx, "http://www.google.com/loc/json", cellIds);  if(result.length() <= 1)  return null;  data = new JSONObject(result);  data = (JSONObject) data.get("location");  Location loc = new Location(LocationManager.NETWORK_PROVIDER);  loc.setLatitude((Double) data.get("latitude"));  loc.setLongitude((Double) data.get("longitude"));  loc.setAccuracy(Float.parseFloat(data.get("accuracy").toString()));  loc.setTime(UtilTool.getUTCTime());  return loc; } catch (JSONException e) {  return null; } catch (UnsupportedEncodingException e) {  e.printStackTrace(); } catch (ClientProtocolException e) {  e.printStackTrace(); } catch (IOException e) {  e.printStackTrace(); } return null; }  /**   * 接收Google返回的数据格式   *  * 出参:{"location":{"latitude":26.0673834,"longitude":119.3119936, *    "address":{"country":"中国","country_code":"CN","region":"福建省","city":"福å・žå¸‚", *    "street":"五一中è・¯","street_number":"128å・"},"accuracy":935.0}, *    "access_token":"2:xiU8YrSifFHUAvRJ:aj9k70VJMRWo_9_G"} * 请求路径:http://maps.google.cn/maps/geo?key=abcdefg&q=26.0673834,119.3119936   *    * @param cellIds   * @return   * @throws UnsupportedEncodingException   * @throws MalformedURLException   * @throws IOException   * @throws ProtocolException   * @throws Exception   */ public static String getResponseResult(Context ctx,String path, ArrayList<CellInfo> cellInfos)  throws UnsupportedEncodingException, MalformedURLException,  IOException, ProtocolException, Exception { String result=""; Log.i(ctx.getApplicationContext().getClass().getSimpleName(),   "in param: "+getRequestParams(cellInfos)); InputStream inStream=UtilTool.sendPostRequest(path,   getRequestParams(cellInfos), "UTF-8"); if(inStream!=null){  byte[] datas=UtilTool.readInputStream(inStream);  if(datas!=null&&datas.length>0){  result=new String(datas, "UTF-8");  //Log.i(ctx.getClass().getSimpleName(), "receive result:"+result);//服务器返回的结果信息  Log.i(ctx.getApplicationContext().getClass().getSimpleName(),     "google cell receive data result:"+result);  }else{  Log.i(ctx.getApplicationContext().getClass().getSimpleName(),    "google cell receive data null");  } }else{  Log.i(ctx.getApplicationContext().getClass().getSimpleName(),     "google cell receive inStream null"); } return result; } /** * 拼装json请求参数,拼装基站信息 *  * 入参:{'version': '1.1.0','host': 'maps.google.com','home_mobile_country_code': 460, *    'home_mobile_network_code': 14136,'radio_type': 'cdma','request_address': true, *    'address_language': 'zh_CN','cell_towers':[{'cell_id': '12835','location_area_code': 6, *    'mobile_country_code': 460,'mobile_network_code': 14136,'age': 0}]} * @param cellInfos * @return */ public static String getRequestParams(List<CellInfo> cellInfos){ StringBuffer sb=new StringBuffer(""); sb.append("{"); if(cellInfos!=null&&cellInfos.size()>0){  sb.append("'version': '1.1.0',"); //google api 版本[必]  sb.append("'host': 'maps.google.com',"); //服务器域名[必]  sb.append("'home_mobile_country_code': "+cellInfos.get(0).getMobileCountryCode()+","); //移动用户所属国家代号[选 中国460]  sb.append("'home_mobile_network_code': "+cellInfos.get(0).getMobileNetworkCode()+","); //移动系统号码[默认0]  sb.append("'radio_type': '"+cellInfos.get(0).getRadioType()+"',"); //信号类型[选 gsm|cdma|wcdma]  sb.append("'request_address': true,"); //是否返回数据[必]  sb.append("'address_language': 'zh_CN',"); //反馈数据语言[选 中国 zh_CN]  sb.append("'cell_towers':["); //移动基站参数对象[必]  for(CellInfo cellInfo:cellInfos){  sb.append("{");  sb.append("'cell_id': '"+cellInfo.getCellId()+"',"); //基站ID[必]  sb.append("'location_area_code': "+cellInfo.getLocationAreaCode()+","); //地区区域码[必]  sb.append("'mobile_country_code': "+cellInfo.getMobileCountryCode()+",");   sb.append("'mobile_network_code': "+cellInfo.getMobileNetworkCode()+",");  sb.append("'age': 0"); //使用好久的数据库[选 默认0表示使用最新的数据库]  sb.append("},");  }  sb.deleteCharAt(sb.length()-1);  sb.append("]"); } sb.append("}"); return sb.toString(); } /** * 获取UTC时间 *  * UTC + 时区差 = 本地时间(北京为东八区) *  * @return */ public static long getUTCTime() {    //取得本地时间    Calendar cal = Calendar.getInstance(Locale.CHINA);    //取得时间偏移量    int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);     //取得夏令时差    int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);     //从本地时间里扣除这些差量,即可以取得UTC时间    cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));     return cal.getTimeInMillis();  } /** * 初始化,记得放在onCreate()方法里初始化,获取基站信息 *  * @return */ public static ArrayList<CellInfo> init(Context ctx) { ArrayList<CellInfo> cellInfos = new ArrayList<CellInfo>(); TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE); //网络制式 int type = tm.getNetworkType();   /**   * 获取SIM卡的IMSI码   * SIM卡唯一标识:IMSI 国际移动用户识别码(IMSI:International Mobile Subscriber Identification Number)是区别移动用户的标志,   * 储存在SIM卡中,可用于区别移动用户的有效信息。IMSI由MCC、MNC、MSIN组成,其中MCC为移动国家号码,由3位数字组成,   * 唯一地识别移动客户所属的国家,我国为460;MNC为网络id,由2位数字组成,   * 用于识别移动客户所归属的移动网络,中国移动为00,中国联通为01,中国电信为03;MSIN为移动客户识别码,采用等长11位数字构成。   * 唯一地识别国内GSM移动通信网中移动客户。所以要区分是移动还是联通,只需取得SIM卡中的MNC字段即可  */ String imsi = tm.getSubscriberId();  alert(ctx, "imsi: "+imsi); //为了区分移动、联通还是电信,推荐使用imsi来判断(万不得己的情况下用getNetworkType()判断,比如imsi为空时) if(imsi!=null&&!"".equals(imsi)){   alert(ctx, "imsi");  if (imsi.startsWith("46000") || imsi.startsWith("46002")) {// 因为移动网络编号46000下的IMSI已经用完,所以虚拟了一个46002编号,134/159号段使用了此编号  // 中国移动  mobile(cellInfos, tm);  } else if (imsi.startsWith("46001")) {  // 中国联通  union(cellInfos, tm);  } else if (imsi.startsWith("46003")) {  // 中国电信  cdma(cellInfos, tm);  }   }else{  alert(ctx, "type");  // 在中国,联通的3G为UMTS或HSDPA,电信的3G为EVDO  // 在中国,移动的2G是EGDE,联通的2G为GPRS,电信的2G为CDMA  // String OperatorName = tm.getNetworkOperatorName();   //中国电信   if (type == TelephonyManager.NETWORK_TYPE_EVDO_A    || type == TelephonyManager.NETWORK_TYPE_EVDO_0   || type == TelephonyManager.NETWORK_TYPE_CDMA    || type ==TelephonyManager.NETWORK_TYPE_1xRTT){  cdma(cellInfos, tm);  }  //移动(EDGE(2.75G)是GPRS(2.5G)的升级版,速度比GPRS要快。目前移动基本在国内升级普及EDGE,联通则在大城市部署EDGE。)  else if(type == TelephonyManager.NETWORK_TYPE_EDGE   || type == TelephonyManager.NETWORK_TYPE_GPRS ){  mobile(cellInfos, tm);  }  //联通(EDGE(2.75G)是GPRS(2.5G)的升级版,速度比GPRS要快。目前移动基本在国内升级普及EDGE,联通则在大城市部署EDGE。)  else if(type == TelephonyManager.NETWORK_TYPE_GPRS   ||type == TelephonyManager.NETWORK_TYPE_EDGE   ||type == TelephonyManager.NETWORK_TYPE_UMTS   ||type == TelephonyManager.NETWORK_TYPE_HSDPA){  union(cellInfos, tm);  } } return cellInfos; } /** * 电信 *  * @param cellInfos * @param tm */ private static void cdma(ArrayList<CellInfo> cellInfos, TelephonyManager tm) { CdmaCellLocation location = (CdmaCellLocation) tm.getCellLocation(); CellInfo info = new CellInfo(); info.setCellId(location.getBaseStationId()); info.setLocationAreaCode(location.getNetworkId()); info.setMobileNetworkCode(String.valueOf(location.getSystemId())); info.setMobileCountryCode(tm.getNetworkOperator().substring(0, 3)); info.setRadioType("cdma"); cellInfos.add(info); //前面获取到的都是单个基站的信息,接下来再获取周围邻近基站信息以辅助通过基站定位的精准性 // 获得邻近基站信息 List<NeighboringCellInfo> list = tm.getNeighboringCellInfo(); int size = list.size(); for (int i = 0; i < size; i++) {  CellInfo cell = new CellInfo();  cell.setCellId(list.get(i).getCid());  cell.setLocationAreaCode(location.getNetworkId());  cell.setMobileNetworkCode(String.valueOf(location.getSystemId()));  cell.setMobileCountryCode(tm.getNetworkOperator().substring(0, 3));  cell.setRadioType("cdma");  cellInfos.add(cell); } } /** * 移动 *  * @param cellInfos * @param tm */ private static void mobile(ArrayList<CellInfo> cellInfos,  TelephonyManager tm) { GsmCellLocation location = (GsmCellLocation)tm.getCellLocation();  CellInfo info = new CellInfo(); info.setCellId(location.getCid()); info.setLocationAreaCode(location.getLac()); info.setMobileNetworkCode(tm.getNetworkOperator().substring(3, 5)); info.setMobileCountryCode(tm.getNetworkOperator().substring(0, 3)); info.setRadioType("gsm"); cellInfos.add(info); //前面获取到的都是单个基站的信息,接下来再获取周围邻近基站信息以辅助通过基站定位的精准性 // 获得邻近基站信息 List<NeighboringCellInfo> list = tm.getNeighboringCellInfo(); int size = list.size(); for (int i = 0; i < size; i++) {  CellInfo cell = new CellInfo();  cell.setCellId(list.get(i).getCid());  cell.setLocationAreaCode(location.getLac());  cell.setMobileNetworkCode(tm.getNetworkOperator().substring(3, 5));  cell.setMobileCountryCode(tm.getNetworkOperator().substring(0, 3));  cell.setRadioType("gsm");  cellInfos.add(cell); } } /** * 联通 *  * @param cellInfos * @param tm */ private static void union(ArrayList<CellInfo> cellInfos, TelephonyManager tm) { GsmCellLocation location = (GsmCellLocation)tm.getCellLocation();  CellInfo info = new CellInfo(); //经过测试,获取联通数据以下两行必须去掉,否则会出现错误,错误类型为JSON Parsing Error //info.setMobileNetworkCode(tm.getNetworkOperator().substring(3, 5));  //info.setMobileCountryCode(tm.getNetworkOperator().substring(0, 3)); info.setCellId(location.getCid()); info.setLocationAreaCode(location.getLac()); info.setMobileNetworkCode(""); info.setMobileCountryCode(""); info.setRadioType("gsm"); cellInfos.add(info); //前面获取到的都是单个基站的信息,接下来再获取周围邻近基站信息以辅助通过基站定位的精准性 // 获得邻近基站信息 List<NeighboringCellInfo> list = tm.getNeighboringCellInfo(); int size = list.size(); for (int i = 0; i < size; i++) {  CellInfo cell = new CellInfo();  cell.setCellId(list.get(i).getCid());  cell.setLocationAreaCode(location.getLac());  cell.setMobileNetworkCode("");  cell.setMobileCountryCode("");  cell.setRadioType("gsm");  cellInfos.add(cell); } } /** * 提示 *  * @param ctx * @param msg */ public static void alert(Context ctx,String msg){ Toast.makeText(ctx, msg, Toast.LENGTH_LONG).show(); } /** * 发送post请求,返回输入流 *  * @param path 访问路径 * @param params json数据格式 * @param encoding 编码 * @return * @throws UnsupportedEncodingException * @throws MalformedURLException * @throws IOException * @throws ProtocolException */ public static InputStream sendPostRequest(String path, String params, String encoding) throws UnsupportedEncodingException, MalformedURLException, IOException, ProtocolException { byte[] data = params.getBytes(encoding); URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); //application/x-javascript text/xml->xml数据 application/x-javascript->json对象 application/x-www-form-urlencoded->表单数据 conn.setRequestProperty("Content-Type", "application/x-javascript; charset="+ encoding); conn.setRequestProperty("Content-Length", String.valueOf(data.length)); conn.setConnectTimeout(5 * 1000); OutputStream outStream = conn.getOutputStream(); outStream.write(data); outStream.flush(); outStream.close(); if(conn.getResponseCode()==200)  return conn.getInputStream(); return null; } /** * 发送get请求 *  * @param path 请求路径 * @return * @throws Exception */ public static String sendGetRequest(String path) throws Exception { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5 * 1000); conn.setRequestMethod("GET"); InputStream inStream = conn.getInputStream(); byte[] data = readInputStream(inStream); String result = new String(data, "UTF-8"); return result; } /** * 从输入流中读取数据 * @param inStream * @return * @throws Exception */ public static byte[] readInputStream(InputStream inStream) throws Exception{ ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while( (len = inStream.read(buffer)) !=-1 ){  outStream.write(buffer, 0, len); } byte[] data = outStream.toByteArray();//网页的二进制数据 outStream.close(); inStream.close(); return data; }}

6、main.xml>布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">  <EditText android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:cursorVisible="false"    android:editable="false"    android:id="@+id/editText"/></LinearLayout>

7、清单文件

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ljq.activity" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".GpsActivity"  android:label="@string/app_name">  <intent-filter>  <action android:name="android.intent.action.MAIN" />  <category   android:name="android.intent.category.LAUNCHER" />  </intent-filter> </activity> <service android:label="GPS服务" android:name=".GpsService" /> </application> <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /></manifest>

效果如下:

希望本文所述对大家的Android程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表