Android Studio 获取经纬度
需求详情
- Service中每隔10秒执行一次定位操作(GPS+基站)
- 定位的结果实时显示在E都市 上(要求得到经度、纬度)
Android Studio注册service服务
- 切记android中的服务是需要在项目清单文件中注册的
首先新建service类,将所建的service添加到清单文件中
<service android:name="服务类坐所在的包名.MyService"></service>
具体创建并启动service方法可参考: Android Service与Activity的交互以及Android service服务
APP js中启动service服务示例代码
console.log("****************启动service服务:" + localStorage.getItem("$locationStatus"));
//获取Activity对象
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass('android.content.Intent');
var intent = new Intent();
// Activity绑定我们的service服务
intent.setClassName(main, "io.dcloud.HBuilder.wxapi.SingASongService");
// 设置需要传递的参数
intent.putExtra("userId", localStorage.getItem("$userId"));
intent.putExtra("url", CONFIG.server_url + "/apploginuser-apploginuser/apploginuser-save2.html");
// 启动service服务
main.startService(intent);
localStorage.setItem('$locationStatus','1');
console.log("****************启动service服务完毕:" +localStorage.getItem("$locationStatus"));
Android studio--Intent 介绍:关于启动service时的Intent介绍
service服务类逻辑示例代码
package io.dcloud.HBuilder.wxapi;import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v4.content.ContextCompat;import org.apache.commons.httpclient.HttpClient;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import io.dcloud.HBuilder.R;public class SingASongService extends Service {private MediaPlayer mMediaPlayer;private String url; // 请求接口private String userId; // 用户IDprivate int taskId; // 周期任务IDprivate Context context=this;private TestThread locationThread; //定时动态获取经纬度线程private Boolean isInterrupted = true;@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {System.out.println("********SingASongService-->onCreate");super.onCreate();mMediaPlayer = MediaPlayer.create(this, R.raw.no_kill);mMediaPlayer.setLooping(true);}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {this.url = intent.getStringExtra("url");this.userId = intent.getStringExtra("userId");System.out.println("**********url:"+url);System.out.println("************userId:"+userId);new Thread(new Runnable() {@Overridepublic void run() {startPlaySong();}}).start();return START_NOT_STICKY;}//开始、暂停播放private void startPlaySong() {System.out.println("********SingASongService-->startPlaySong-->initLocation");if (null == locationThread){locationThread = new TestThread();locationThread.start();}else {locationThread.start();}if (mMediaPlayer == null) {mMediaPlayer = MediaPlayer.create(this, R.raw.no_kill);mMediaPlayer.start();} else {mMediaPlayer.start();}}/*** 动态获取用户经纬度位置并向后台发送请求更新用户地图位置显示*/public class TestThread extends Thread {public volatile boolean exit = false;public void run() {while (!exit){try{if (this.interrupted()) {System.out.println("**********************已经是停止状态了,我要退出了***********************");break;}//初始化定位工具类LocationUtils.initLocation(context);System.out.println("GPS **********Location经度:"+LocationUtils.longitude);System.out.println("GPS **********Location纬度:"+LocationUtils.latitude);sendPost(url,"latitude="+LocationUtils.latitude+"&longitude="+LocationUtils.longitude+"&userId="+userId);Thread.sleep(10000);//阻塞过程捕获中断异常来退出}catch(InterruptedException e){e.printStackTrace();System.out.println("*****************************捕获中断异常:跳出线程循环*********************");break;//捕获到异常之后,执行break跳出循环。}}}}/*** 向后台发送请求更新用户位置* @param url 请求接口* @param param 经纬度以及用户ID* @return*/public static String sendPost(String url, String param) {System.out.println("********param:"+param);System.out.println("********url:"+url);PrintWriter out = null;BufferedReader in = null;String result = "";if (null != url){try {URL realUrl = new URL(url);// 打开和URL之间的连接URLConnection conn = realUrl.openConnection();// 设置通用的请求属性conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// 获取URLConnection对象对应的输出流out = new PrintWriter(conn.getOutputStream());// 发送请求参数out.print(param);// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}System.out.println("********result"+result);} catch (Exception e) {System.out.println("发送 POST 请求出现异常!"+e);e.printStackTrace();}//使用finally块来关闭输出流、输入流finally{try{if(out!=null){out.close();}if(in!=null){in.close();}}catch(IOException ex){ex.printStackTrace();}}}return result;}@Overridepublic void onDestroy() {System.out.println("********SingASongService-->onDestroy");super.onDestroy();stopPlaySong();System.out.println("***********************调用方法终止线程");locationThread.exit = true;locationThread.interrupt();try {locationThread.join();} catch (InterruptedException e) {e.printStackTrace();}}//停止播放销毁对象private void stopPlaySong() {if (mMediaPlayer != null) {mMediaPlayer.stop();mMediaPlayer.release();mMediaPlayer = null;}}}
js 停止service服务代码示例
console.log("*******************关闭service服务开启:"+localStorage.getItem("$locationStatus"));
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass('android.content.Intent');
var intent = new Intent();
intent.setClassName(main, "io.dcloud.HBuilder.wxapi.SingASongService");
main.stopService(intent);
localStorage.setItem('$locationStatus','0');
console.log("*******************关闭service服务完毕:"+localStorage.getItem("$locationStatus"));
首先开启Android定位的相关权限
Android Studio中相关权限介绍:Android AndroidManifest 清单文件所有权限详解
LocationManager定位工具类示例代码
package io.dcloud.HBuilder.wxapi;import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;public class LocationUtils {// 纬度public static Double latitude = 0.0;// 经度public static Double longitude = 0.0;/*** 初始化位置信息** @param context*/public static void initLocation(Context context) {LocationListener locationListener = new LocationListener() {// Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数@Overridepublic void onStatusChanged(String provider, int status,Bundle extras) {}// Provider被enable时触发此函数,比如GPS被打开@Overridepublic void onProviderEnabled(String provider) {}// Provider被disable时触发此函数,比如GPS被关闭@Overridepublic void onProviderDisabled(String provider) {}// 当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发@Overridepublic void onLocationChanged(Location location) {if (location != null) {latitude = location.getLatitude();longitude = location.getLongitude();}}};LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);System.out.println("********locationManager:"+locationManager);// 检测GPS定位是否可用,不可用则进行网络定位(信号塔或WiFi定位的初略定位方式)if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {System.out.println("********locationManager.isProviderEnabled:"+LocationManager.GPS_PROVIDER);if (ContextCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED|| ContextCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED){Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);if (location != null) {latitude = location.getLatitude();longitude = location.getLongitude();}System.out.println("********initLocation-->isProviderEnabled-->after-->latitude:"+latitude);System.out.println("********initLocation-->isProviderEnabled-->after-->longitude:"+longitude);}} else {locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000, 0, locationListener);Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);if (location != null) {latitude = location.getLatitude(); // 经度longitude = location.getLongitude(); // 纬度}System.out.println("********initLocation-->after-->latitude:"+latitude);System.out.println("********initLocation-->after-->longitude:"+longitude);}}
}
关于Android Studio中获取经纬度的相关参考:
Android 定位的实现
Android Service获取当前位置(GPS+基站)
Android初级教程获取手机位置信息GPS与动态获取最佳方式
Android Studio 离线打包:Android平台本地(离线)打包指南
Android Studio 获取经纬度相关推荐
- 【Android Studio安装部署系列】十一、Android studio获取数字签名信息
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 下面介绍下调试版本和发布版本获取数字签名的方法,通过以下方法可以获取到SHA1和MD5. 一般在使用分享功能,在第三方平台中创建应用 ...
- Android获取电子签名内容,Android Studio 获取app签名
今天在学习整合高德地图的时候,需要app的sha1码. image.png Android Studio 获取app签名的步骤如下: 1.Build下的Generate Signed APK imag ...
- Android Studio 获取应用签名 MD5和SHA1等
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.配置module的build.gradle 二.使用步骤 总结 前言 平时开发,很多第三方需要配置应用签名,比如百 ...
- Android Studio获取SHA-1 key的方法
Android Studio获取SHA-1 key的方法: 首先去C盘的C:\Users\R.android(R是自己设置的电脑名称)找是否有.android文件夹: 若有就用cmd命令调出电脑的命令 ...
- Android studio获取服务器端json数据——天气预报(仅读取了json文件尚未分析)
Android studio获取服务器端json数据--天气预报 MainActivity.java import androidx.appcompat.app.AppCompatActivity;i ...
- 错误 程序包android.app不存在,运行.app时Android Studio获取包名称错误
运行.app时Android Studio获取包名称错误 我将程序包名称从com.mycompany.myapplication更改为com.mycompany.testapp. 一切都构建良好,但是 ...
- android studio 获取sha1keytool -list -v -keystore E:\PGY\keyStore\chunni.jks
android studio 获取sha1值的方法 keytool -list -v -keystore E:\PGY\keyStore\xxxx.jks
- Android studio 获取MD5和SHA1
一. 1.进入到自己的jdk中的bin目录中 2.执行命令keytool -v -list -keystore c:\Users\xxxx\.android\debug.keystore 这是获取An ...
- 使用andorid studio获取经纬度信息
可以使用模拟器或者安卓真机_建议真机_ 小节简介 原理介绍 注意事项: 运行结果如下 小节简介 平台:andorid studio3.5.2 涉及文件:acticity_main.xml.Andori ...
最新文章
- 研究人员利用脑电ErrP信号实时控制机器人
- python对英语和数学的帮助-文科女生学Python:学过初中数学和英语就能懂的编程逻辑...
- python画笑脸图案-如何用Python画滑稽笑脸
- 推荐 7 个牛哄哄 Spring Cloud 实战项目
- 实现接口与显示实现接口的区别
- ubuntu 如何转换 ppk ,连接 amazon ec2
- java.util.Collections类使用(很多秘密,网上资料亲测)
- Viliv N5 GPS安装及使用方法
- 2008-2011大股东增持专题
- 戴尔计算机没有硬盘驱动,如果Dell计算机无法从硬盘驱动器启动怎么办
- SSM框架利用Filter实现页面不登陆拦截,禁止跳过登录页面不登陆强制访问
- 蓝桥杯国信长天单片机--原理图详解(四)
- 前阿里P10员工赵海平加入字节跳动,职级或为4+
- 范德堡计算机科学硕士,美国范德堡大学计算机科学专业怎么样?
- 网络爬虫法即将出台!!!小爬怡情,大爬over
- directx安装后找不到_如何下载,安装,更新到最新的DirectX
- html怎么引用网页链接,网页中各种链接引用方法小结
- “她经济”时代,兜售少女心的乙女游戏将成新风口?
- 05月11日三支有望飙涨股与操盘策略分析
- 网站开启https后很慢_安装SSL证书会导致网站访问速度变慢?