package com.zzk.a1701location;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.*;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
TextView tvResult;
Button btnStart;
Button btnStop;
EditText etPeriod;
EditText etDistance;
LocationManager manager;
LocationListener listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvResult = (TextView) findViewById(R.id.textViewResult);
btnStart = (Button) findViewById(R.id.buttonStart);
btnStop = (Button) findViewById(R.id.buttonStop);
etPeriod = (EditText) findViewById(R.id.editTextPeriod);
etDistance = (EditText) findViewById(R.id.editTextDistance);
manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER) &&
!manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
askLocationSettings();
}
listener = new LocationListener() {
@Override
public void onLocationChanged(Location arg0) {
String txt = "Longitude:" + arg0.getLongitude() + ", Latitude:" + arg0.getLatitude() + // 经度,纬度
", Altitude" + arg0.getAltitude() + ", Speed:" + arg0.getSpeed(); // 高度,速度
tvResult.append(txt + "\n");
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
};
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
if (ActivityCompat.checkSelfPermission(getBaseContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getBaseContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
if (!checkPermissions(permissions, 101)) {
return;
}
}
startListening();
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
manager.removeUpdates(listener);
tvResult.append("Location listener stoped.\n");
}
});
}
@SuppressLint("MissingPermission")
void startListening(){
Criteria crt = new Criteria(); // 位置监听标准
crt.setHorizontalAccuracy(Criteria.ACCURACY_HIGH); // 水平精度高
crt.setAltitudeRequired(true); // 需要高度
String provider = manager.getBestProvider(crt, true); // 寻找最匹配的provider
Location l = manager.getLastKnownLocation(provider); // 取最后已知位置,即缓存中的位置
if(l!=null) tvResult.append(provider + "-LastKnown:" + l.toString() + "\n");
long period = Long.parseLong(etPeriod.getText().toString()); // 最小时间间隔
int distance = Integer.parseInt(etDistance.getText().toString()); // 最小距离
manager.requestLocationUpdates(provider, period*1000, distance, listener); // 开始监听
tvResult.append(provider + "-Location listener started.\n");
}
void askLocationSettings(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("开启位置服务");
builder.setMessage("本应用需要开启位置服务,是否去设置界面开启位置服务?");
builder.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
final Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MainActivity.this.startActivity(intent);
}
});
builder.setNegativeButton("否", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
Toast.makeText(MainActivity.this, "No location provider to use", Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
/**
* 检查需要的权限是否都允许
* @param permisssions 需要的权限
* @param requestCode 结果返回后区分请求者
* @return true,如果都允许了;false,至少有一项权限没有允许
*/
boolean checkPermissions(String[] permisssions, int requestCode) {
List<String> ungranted = new ArrayList<String>();
for(String permission:permisssions) {
if (ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
ungranted.add(permission);
}
}
if(ungranted.size()>0){
String[] ungrantedString = new String[ungranted.size()];
ActivityCompat.requestPermissions(this, (String[])ungranted.toArray(ungrantedString), requestCode);
return false;
}
return true;
}
boolean checkGrantResults(int[] grantResults){
for(int result:grantResults){
if(result!=PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if(checkGrantResults(grantResults)){
Log.i("zzk", "permission granted");
if(requestCode==101){ // 权限申请通过后的处理
startListening();
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Android定位功能开发-获取经纬度坐标的例子
共112个文件
xml:70个
webp:10个
properties:7个
需积分: 0 41 下载量 157 浏览量
2023-11-17
09:56:45
上传
评论
收藏 276KB ZIP 举报
温馨提示
Android应用中使用定位服务获取当前经纬度坐标的例子。
资源推荐
资源详情
资源评论
收起资源包目录
Android定位功能开发-获取经纬度坐标的例子 (112个子文件)
gradlew.bat 3KB
executionHistory.bin 589KB
fileHashes.bin 43KB
outputFiles.bin 21KB
resourceHashesCache.bin 18KB
last-build.bin 1B
.gitignore 225B
.gitignore 50B
.gitignore 6B
build.gradle 1021B
settings.gradle 329B
build.gradle 291B
gradlew 6KB
1701Location.app.iml 9KB
1701Location.iml 920B
gradle-wrapper.jar 58KB
MainActivity.java 7KB
ExampleInstrumentedTest.java 756B
ExampleUnitTest.java 382B
buildOutputCleanup.lock 17B
checksums.lock 17B
dependencies-accessors.lock 17B
fileHashes.lock 17B
executionHistory.lock 17B
proguard-rules.pro 750B
gradle.properties 1KB
local.properties 425B
gradle-wrapper.properties 236B
cache.properties 51B
gc.properties 0B
gc.properties 0B
gc.properties 0B
ic_launcher_round.webp 8KB
ic_launcher_round.webp 6KB
ic_launcher_round.webp 4KB
ic_launcher.webp 4KB
ic_launcher_round.webp 3KB
ic_launcher.webp 3KB
ic_launcher.webp 2KB
ic_launcher_round.webp 2KB
ic_launcher.webp 1KB
ic_launcher.webp 982B
workspace.xml 6KB
ic_launcher_background.xml 5KB
activity_main.xml 2KB
ic_launcher_foreground.xml 2KB
Gradle__androidx_test_espresso_espresso_idling_resource_3_4_0_aar.xml 1KB
Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml 1KB
Gradle__androidx_test_espresso_espresso_core_3_4_0_aar.xml 1KB
Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml 1KB
Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml 1KB
Gradle__com_google_android_material_material_1_4_0_aar.xml 1015B
Gradle__androidx_transition_transition_1_2_0_aar.xml 1013B
Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml 1013B
Gradle__androidx_appcompat_appcompat_1_3_0_aar.xml 1004B
Gradle__androidx_activity_activity_1_2_3_aar.xml 995B
Gradle__androidx_fragment_fragment_1_3_4_aar.xml 995B
Gradle__androidx_test_monitor_1_4_0_aar.xml 981B
Gradle__androidx_test_ext_junit_1_1_3_aar.xml 978B
Gradle__androidx_test_runner_1_4_0_aar.xml 974B
Gradle__androidx_print_print_1_0_0_aar.xml 968B
AndroidManifest.xml 959B
Gradle__androidx_core_core_1_5_0_aar.xml 959B
Gradle__androidx_test_core_1_4_0_aar.xml 958B
Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml 944B
Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml 913B
Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml 912B
Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml 908B
Gradle__androidx_annotation_annotation_experimental_1_0_0_aar.xml 904B
Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml 902B
Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml 898B
Gradle__androidx_appcompat_appcompat_resources_1_3_0_aar.xml 878B
Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml 877B
Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml 874B
Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml 872B
Gradle__androidx_lifecycle_lifecycle_runtime_2_3_1_aar.xml 866B
Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml 858B
Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml 850B
Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml 842B
Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml 842B
Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml 836B
Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml 836B
themes.xml 834B
themes.xml 834B
Gradle__androidx_customview_customview_1_0_0_aar.xml 826B
Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml 825B
Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml 818B
Gradle__androidx_test_services_storage_1_4_0_aar.xml 814B
Gradle__androidx_cardview_cardview_1_0_0_aar.xml 810B
Gradle__androidx_loader_loader_1_0_0_aar.xml 794B
Gradle__org_hamcrest_hamcrest_integration_1_3.xml 789B
gradle.xml 765B
Gradle__org_hamcrest_hamcrest_library_1_3.xml 760B
Gradle__org_hamcrest_hamcrest_core_1_3.xml 740B
Gradle__com_squareup_javawriter_2_1_1.xml 733B
Gradle__javax_inject_javax_inject_1.xml 719B
Gradle__junit_junit_4_13_2.xml 677B
Gradle__junit_junit_4_12.xml 663B
Gradle__androidx_constraintlayout_constraintlayout_2_0_4_aar.xml 658B
misc.xml 651B
共 112 条
- 1
- 2
资源评论
nanoage
- 粉丝: 43
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功