概述
这两天项目中需要用到数据和GPS定位,判断如果没有网络就用GPS,有网络就用数据定位。但是locationManager.getLastKnownLocation这句话一写就会报红。纠结很久,最后老员工说在他的机子上就没有问题,我意识到有可能是版本问题。在gradle中把targetSdkVersion 改成22就可以了。所以以后用GPS权限用这几步就好了。
-
在AndroidManifest.xml文件中加入如下权限:
<!-- 连接互联网Internet权限 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- GPS定位权限 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
-
是否连接网络
ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); //去进行判断网络是否连接 if (manager.getActiveNetworkInfo() != null) { flag = manager.getActiveNetworkInfo().isAvailable(); }
- 检测网络定位还是GPS定位
if (!flag) { isGPS = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); if (isGPS == true) { locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener); Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); processLocationUpdated(location); Intent intent=new Intent(AlarmAct.this, MainActivity.class); AlarmAct.this.finish(); startActivity(intent); } else { Toast.makeText(AlarmAct.this, "请打开GPS!", Toast.LENGTH_LONG).show(); } } else { locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, locationListener); Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); processLocationUpdated(location); Intent intent=new Intent(AlarmAct.this, MainActivity.class); AlarmAct.this.finish(); startActivity(intent); }
现在用的新版本,有可能会出现差错,为了正常运行测试,你最好修改代码支持最新的权限系统,而且我觉得项目开始就要注意。 代码没有成功 改为支持最新运行时权限的app,不要设置targetSdkVersion 23 发布,否则你就有麻烦了。只有当你测试过了,再改为targetSdkVersion 23 。
警告:现在你在android studio新建项目,targetSdkVersion 会自动设置为 23。如果你还没支持新运行时权限,我建议你首先把targetSdkVersion 降级到22。
这是我的第一篇博文,请大家多多鼓励,谢谢。
最后
以上就是阔达帆布鞋为你收集整理的Android中GPS和网络权限的全部内容,希望文章能够帮你解决Android中GPS和网络权限所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复