前言

gps定位服务的学习是这段时间gps课程的学习内容,之前老师一直在将概念,今天终于是实践课(其实就是给了一个案例,让自己照着敲).不过在照着案列敲了两遍之后,发现老师的案例是在是太老了,并且直接照着案例敲,也无法理解其中很多类,方法的作用.

于是自己在网上查看了其他实现的方法,并尝试敲案列,期间的挫折一言难尽.

(网上找的案例也并不信息,使得我在给予权限,和权限检查方面一直报错,因为我使用的是最新的As和java11,在经过数遍从基础理解到实例编写的过程和不知多少遍google之后,终于完成了这次练习)

•总结起来:

◦还是发现自己有不少的问题,在代码的理解能力上经过了这段时间的学习确实有些长进,但在较复杂的语句上面,理解还是有不小的困难.

◦其次,在没有事先了解学习某些类之前,是真的不适合直接照案例敲和学习(没有十分详细注释的案例,通常情况下都是如此),其效率实在低下,且很多时候会不知所云.

(个人并不提倡照着敲,敲的多了自然就懂了的学习说法,或许它只是针对于懒的人,亦或许这种说法其实只是一个劝诫我们勤奋努力,多实践的比喻.).

--------------------------------------------------------------------------------

•源代码 ◦activity_main.xml

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity"

android:orientation="vertical"

>

android:id="@+id/tv_show"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:padding="5dp"

android:textSize="22dp"

android:textStyle="bold" />

•MainActivity.java

package cn.gemuxiaoshe.gpsapplication20;

import android.Manifest;

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.provider.Settings;

import android.support.v4.app.ActivityCompat;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.TextView;

import android.widget.Toast;

import java.util.Date;

public class MainActivity extends AppCompatActivity {

private LocationManager lm;

private TextView tv_show;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv_show = (TextView) findViewById(R.id.tv_show);

lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

if (!isGpsAble(lm)) {

Toast.makeText(MainActivity.this, "请打开Gps!", Toast.LENGTH_SHORT).show();

openGps();

}

// 从gps获取最近的定位信息

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

return;

}

Location lc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

updateShow(lc);

//设置间隔两秒获得一次gps定位信息

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 8, new LocationListener() {

@Override

public void onLocationChanged(Location location) {

// 当gps定位信息发生改变时,更新定位

updateShow(location);

}

@Override

public void onStatusChanged(String s, int i, Bundle bundle) {

}

@Override

public void onProviderEnabled(String provider) {

// 当gpsLocationProvider可用时,更新定位

if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

return;

}

updateShow(lm.getLastKnownLocation(provider));

}

@Override

public void onProviderDisabled(String s) {

updateShow(null);

}

});

}

// 定义更新显示的方法

private void updateShow(Location location){

if (location!=null){

StringBuilder sb =new StringBuilder();

sb.append("当前gps位置定位信息:\n");

sb.append("经度:"+location.getLongitude()+"\n");

sb.append("维度:"+location.getLatitude()+"\n");

sb.append("海拔:"+location.getAltitude()+"\n");

sb.append("速度:"+location.getSpeed()+"\n");

sb.append("方位:"+location.getBearing()+"\n");

sb.append("时间:"+location.getTime()+"\n");

sb.append("定位精度:"+location.getLongitude()+"\n");

tv_show.setText(sb.toString());

}else

tv_show.setText("");

}

private boolean isGpsAble(LocationManager lm) {

return lm.isProviderEnabled(LocationManager.GPS_PROVIDER)?true:false;

}

// 打开设置界面让用户自己设置

private void openGps(){

Intent intent = new Intent(Settings.ACTION_LOCALE_SETTINGS);

startActivityForResult(intent,0);

}

}

需要注意到的是:

•我屡次报错的原因:

“从Android 6.0(API级别23)开始,用户在应用程序运行时向应用程序授予权限,而不是在安装应用程序时授予权限。” 在这种情况下,“ACCESS_FINE_LOCATION”是一个“危险权限,因此,你会得到这个'java.lang.SecurityException:”gps“位置提供者需要ACCESS_FINE_LOCATION权限。” 错误.

•解决方法:

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

return;

}

•关于该问题的详细说明请参看:

在运行时请求权限

•演示

•这里需要注意的是:

如果你是在模拟器上测试程序时,请手动打开应用的权限设置,并给予程序获取定位信息的权限.否则模拟器是不会有提示的,你只会获得下面这样的一段崩溃记录...

就记录到这里了,关于gps定位服务的详细学习在之后会单独出笔记记录,今天是就照案列敲的一次练习,并简记一下从中学到的的一些东西.并深刻体会下这种坑爹的学习方式.

总结

以上所述是小编给大家介绍的Android开发之android_gps定位服务简单实现,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

android 强制打开gps定位_Android开发之android_gps定位服务简单实现相关推荐

  1. android 强制打开gps定位_Android判断GPS是否开启和强制帮用户打开GPS

    引子:在我们的应用为用户提供定位服务时,通常想为用户提供精确点的定位服务,这是需要用户配合的.我们必须先检测用户手机的GPS当前是否打开,若没打开则弹出对话框提示.用户若不配合我们也没办法,只能采用基 ...

  2. android 强制打开gps定位_Android 6.0动态权限及跳转GPS设置界面的方法

    1.动态权限申请 模糊的位置信息android.permission.ACCESS_COARSE_LOCATION权限为例 在AndroidManifest文件中加入权限 然后java代码中动态申请 ...

  3. android 强制打开gps定位_Android 6.0 默认关闭定位和GPS,开启后默认选省电

    默认关闭定位和GPS 修改位置 frameworks/base/packages/SettingsProvider/res/values/defaults.xml network,gps 修改为 默认 ...

  4. android 画爱心进度条_Android 开发之 HeartProgress 自定义心形进度条

    今天找到一个比较不错的进度有关的素材,随即写了一个自定义控件HeartProgress,思路:先把图片绘制进去,然后根据进度值,截取图片自下而上的范围,进行裁剪,裁剪后的图片进行图片变色,然后重新绘制 ...

  5. 29 Oracle数据库SQL开发之 SQLPlus使用——创建简单报表

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 29.O ...

  6. android 判断byte值_Android开发之UDP可靠性传输

    轩羽:Android开发之UDP​zhuanlan.zhihu.com 在这一篇文章里,小编说到UDP是不可靠的,故,我们要自己写一套协议,来使UDP实现可靠性传输,这里,小编和小编的小伙伴一起,写了 ...

  7. RK3228H开发之3328芯片手册简单分析

    一.引言 因为RK3328的芯片手册比较庞大,且为英文版,故今天来一起分析下 二.目录结构 目录(在此之详细分析常用模块) part 1 figure index :手册内所有的结构示意图 table ...

  8. android 字符串替换_Android开发之旅:android架构

    第一次观看我文章的朋友,可以关注.点赞.转发一下,每天分享各种干货技术和程序猿趣事 目录 1.架构图直观 2.架构详解 2.1.Linux Kernel 2.1.Android Runtime 2.3 ...

  9. edtext 从右边开始输入 安卓_Android开发之EditText属性详解

    1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以".&quo ...

  10. android手机打开java文件_Android Studio打开手机权限

    java.io.FileNotFoundException: /storage/emulated/0/xxx.mp3: open failed: EACCES (Permission denied) ...

最新文章

  1. Python学习(一) 安装,环境搭建,IDE
  2. AS整理代码快捷键 ctl+alt+L
  3. 下沉市场消费升级静悄悄?
  4. MongoDB进阶-内嵌文档查询
  5. IELE:区块链的一个新虚拟机
  6. java io流 教程_Java基础教程:IO流与文件基础
  7. 4 Convex optimization problems
  8. T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他
  9. windows下dump文件调试
  10. cmake flags
  11. 【JavaSE】接口
  12. C++ 多态(动态多态)
  13. Android各国语言对照表
  14. 一步一步安装 Microsoft .NET Pet Shop 4.0
  15. Python猜数字小游戏
  16. DNS域名解析TTL是什么?TTL值设置多少合适?
  17. android 8.0 屏蔽首次开机弹出的‘即将完成 Android 更新’的弹窗
  18. 住建部大力支持购买第一套住房,下降首付比、首套利率
  19. HTTPS代理的工作原理
  20. Visifire图表

热门文章

  1. PyQT多线程串口 QtDesigner
  2. 自定义View之Layout方法详解
  3. C++ 验证DH算法
  4. 视频通讯使用的SIP协议详解
  5. ffmpeg ffprobe查看视频文件编码格式
  6. 修复oracle注册表,老司机修复oracle卸载干净【调解方案】
  7. 计算机保护插件无法安装,电脑无法安装ActiveX控件怎么办
  8. 用python模拟clark变换和park变换
  9. Python实现网络出口带宽自动巡检
  10. OpenCV计算图像PSNR峰值信噪比