Android使用网络获取定位的方法

本文实例为大家分享了Android使用网络获取定位的具体代码,供大家参考,具体内容如下

目标效果:

程序运行弹出权限选择,选择运行网络定位后会查询位置,然后在TextView上显示当前国家和城市。

1.activity_main.xml页面定义TextView显示城市名。

activity_main.xml页面:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context=".MainActivity" >

  <TextView
    android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="正在定位。。。" />

</RelativeLayout>

2.新建Common.java页面,设置公共常量。

Common.java页面:

package com.sc.demo.common;
/**
 * 公共常量
 * @author wxy
 *
 */
public class Common {

 public static final String LOCATION = "location";
 public static final String LOCATION_ACTION = "locationAction";
}

3.新建LocationSvc.java页面作为服务进行定位。

LocationSvc.java页面:

package com.sc.demo.locate;

import com.sc.demo.common.Common;

import android.app.Service;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

/**
 * 定位服务
 * @author wxy
 *
 */
public class LocationSvc extends Service implements LocationListener {

 private LocationManager locationManager;

 @Override
 public IBinder onBind(Intent intent) {
 return null;
 }

 @Override
 public void onCreate() {
 locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
 }

 @Override
 public void onStart(Intent intent, int startId) {
 if (locationManager.getProvider(LocationManager.NETWORK_PROVIDER) != null) locationManager
  .requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
   this);
 else if (locationManager.getProvider(LocationManager.GPS_PROVIDER) != null) locationManager
  .requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
   this);
 else Toast.makeText(this, "无法定位", Toast.LENGTH_SHORT).show();
 }

 @Override
 public boolean stopService(Intent name) {
 return super.stopService(name);
 }

 @Override
 public void onLocationChanged(Location location) {

 //通知Activity
 Intent intent = new Intent();
 intent.setAction(Common.LOCATION_ACTION);
 intent.putExtra(Common.LOCATION, location.toString());
 sendBroadcast(intent);

 // 如果只是需要定位一次,这里就移除监听,停掉服务。如果要进行实时定位,可以在退出应用或者其他时刻停掉定位服务。
 locationManager.removeUpdates(this);
 stopSelf();
 }

 @Override
 public void onProviderDisabled(String provider) {
 }

 @Override
 public void onProviderEnabled(String provider) {
 }

 @Override
 public void onStatusChanged(String provider, int status, Bundle extras) {
 }

}

4.MainActivity.java页面获取经纬度,然后根据经纬度获取城市名。

MainActivity.java页面:

package com.sc.demo;

import java.io.IOException;
import java.util.List;

import com.sc.demo.common.Common;
import com.sc.demo.locate.LocationSvc;

import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

public class MainActivity extends Activity {

 private TextView text;
 private ProgressDialog dialog;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 text = (TextView) findViewById(R.id.text);

 // 注册广播
 IntentFilter filter = new IntentFilter();
 filter.addAction(Common.LOCATION_ACTION);
 this.registerReceiver(new LocationBroadcastReceiver(), filter);

 // 启动服务
 Intent intent = new Intent();
 intent.setClass(this, LocationSvc.class);
 startService(intent);

 // 等待提示
 dialog = new ProgressDialog(this);
 dialog.setMessage("正在定位...");
 dialog.setCancelable(true);
 dialog.show();
 }

 private class LocationBroadcastReceiver extends BroadcastReceiver {

 @Override
 public void onReceive(Context context, Intent intent) {
  if (!intent.getAction().equals(Common.LOCATION_ACTION))
  return;
  String locationInfo = intent.getStringExtra(Common.LOCATION);
  double latitude = Double                 //截取经纬度转换为double型
   .parseDouble(locationInfo.substring(17, 26));
  double longitude = Double.parseDouble(locationInfo
   .substring(27, 37));
  text.setText(getaddress(latitude, longitude));
  dialog.dismiss();
  MainActivity.this.unregisterReceiver(this);// 不需要时注销
 }

 public String getaddress(double latitude, double longitude) {
  String cityName = "";
  List<Address> addList = null;
  Geocoder ge = new Geocoder(MainActivity.this);
  try {
  addList = ge.getFromLocation(latitude, longitude, 1);
  } catch (IOException e) {
  e.printStackTrace();
  }
  if (addList != null && addList.size() > 0) {
  for (int i = 0; i < addList.size(); i++) {
   Address ad = addList.get(i);
   cityName += ad.getCountryName() + ";" + ad.getLocality();
  }
  }
  Log.i("wxy", "city:" + cityName);
  return cityName;
 }
 }
}

5.AndroidManifest.xml页面添加权限并声明服务。

AndroidManifest.xml页面:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.sc.demo"
  android:versionCode="1"
  android:versionName="1.0" >

  <uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="18" />

  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

  <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
      android:name="com.sc.demo.MainActivity"
      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:name=".locate.LocationSvc" />
  </application>

</manifest>

6.运行就能显示目标效果了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • android使用百度地图SDK获取定位信息示例

    本文使用Android Studio开发. 获取定位信息相对简单,我们只需要如下几步: 第一步,注册百度账号,在百度地图开放平台新建应用.生成API_KEY.这些就不细说了,请前往这里:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/key 第二步,下载sdk,地址:http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download

  • Android百度定位导航之基于百度地图移动获取位置和自动定位

    一.问题描述 使用百度地图实现如图所示应用,首先自动定位当前我起始位置(小圆点位置),并跟随移动不断自动定位我的当前位置 百度Api不同版本使用会有些差异,本例中加入lib如下: 二.编写MyApplication类 public class MyApplication extends Application { static MyApplication myApplication; BMapManager mBMapManager = null; String mStrKey = "7ZfuR

  • android通过gps获取定位的位置数据和gps经纬度

    复制代码 代码如下: package com.action.android_test;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.

  • Android6.0获取GPS定位和获取位置权限和位置信息的方法

    1.添加权限--6.0之后要动态获取,下面会说 <uses-permission android:name= "android.permission.ACCESS_FINE_LOCATION"/> 2.直接上代码,不多说,代码中注释很详细. private static final int BAIDU_READ_PHONE_STATE = 100;//定位权限请求 private static final int PRIVATE_CODE = 1315;//开启GPS权限

  • Android百度地图定位后获取周边位置的实现代码

    本文实例讲解Android百度地图定位后获取周边位置的实现代码,分享给大家供大家参考,具体内容如下 效果图: 具体代码: 1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical&q

  • Android使用网络获取定位的方法

    本文实例为大家分享了Android使用网络获取定位的具体代码,供大家参考,具体内容如下 目标效果: 程序运行弹出权限选择,选择运行网络定位后会查询位置,然后在TextView上显示当前国家和城市. 1.activity_main.xml页面定义TextView显示城市名. activity_main.xml页面: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too

  • Android基于APN获取手机号的方法

    本文实例讲述了Android基于APN获取手机号的方法.分享给大家供大家参考.具体如下: 之前很多人说无法完全获取手机号,是因为现在有的卡不能获取,有的卡能获取,现在我们可以换一种思路来考虑问题,就是用APN的方式.请看代码: APNNET.java如下: /** * 电信APN列表 * @author wudongdong * */ public class APNNET { public static String CTWAP="ctwap"; public static Stri

  • Python3之读取连接过的网络并定位的方法

    如下所示: #!/usr/bin/python # coding=utf-8 import json from urllib.request import urlopen from winreg import * def val2addr(val): addr = "" for ch in val: addr += ("%02x " % ord(ch)) addr = addr.strip(" ").replace(" ",

  • Android调用高德地图定位的方法

    在App中使用地图定位十分常见,购物功能的可以直接定位当前位置,发动态功能可以定位当前位置发出,社交功能可以定位周边用户等等.这里我使用高德地图定位当前位置并显示地址和经纬度. github代码传送门 先上效果图: 实现步骤: 1. 创建应用获取key: 接入第三方无一例外,去高德地图官网注册账号并创建应用.填入包名和keystore的Sha1. 创建应用 获取Sha1,输入命令keytool -v -list -keystore keystore文件路径,我在这里通过控制台获取调试版的: 进入

  • Android使用线程获取网络图片的方法

    本文为大家分享了Android使用线程获取网络图片的具体代码,供大家参考,具体内容如下 AndroidManifest.xml    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zdcrobot.handlermessage

  • Android实现从网络获取图片显示并保存到SD卡的方法

    本文实例讲述了Android实现从网络获取图片显示并保存到SD卡的方法.分享给大家供大家参考,具体如下: 问题: 如何不断获取图片并显示出来,达到视频的效果? 代码: public class GetPictureFromInternetActivity extends Activity { private ImageView imageView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst

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

    本文实例讲述了Android实现Service获取当前位置(GPS+基站)的方法.分享给大家供大家参考.具体如下: 需求详情: 1).Service中每隔1秒执行一次定位操作(GPS+基站) 2).定位的结果实时显示在界面上(要求得到经度.纬度) 技术支持: 1).获取经纬度 通过GPS+基站获取经纬度,先通过GPS来获取,如果为空改用基站进行获取–>GPS+基站(基站获取支持联通.电信.移动). 2).实时获取经纬度 为了达到实时获取经纬度,需在后台启动获取经纬度的Service,然后把经纬度

  • SQL性能优化之定位网络性能问题的方法(DEMO)

    最近项目组同事跟我说遇到一个SQL性能问题,他说全表只有69条记录,客户端执行耗费了两分多钟,很不科学.我帮了分析出了原因并得到解决.下面小编安装类似表结构,构造了一个案例,测试截图如下所示: 这个表有13800KB(也就是13M多大小),因为该表将图片保存到数据库(Item_Photo字段为iamge类型),这个是历史原因,暂且不喷这种的设计.看来这个SQL执行时间长的性能问题不在于IO和SQL本身执行计划是否有问题,而是在网络数据传时间上(服务器与客户端位于异地,两地专线带宽6M,不过很多应

  • Android编程实现获取所有传感器数据的方法

    本文实例讲述了Android编程实现获取所有传感器数据的方法.分享给大家供大家参考,具体如下: main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" androi

随机推荐