import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private String TAG = "MainActivity";
private TextView weizhi;
private ListView listview;
private LocationManager systemService;
private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
getLoaction(location);
}
public void onProviderDisabled(String provider){
getLoaction(null);
}
public void onProviderEnabled(String provider){ }
public void onStatusChanged(String provider, int status,
Bundle extras){ }
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
weizhi = (TextView) findViewById(R.id.weizhi);
listview = (ListView) findViewById(R.id.shijian);
//动态检查权限,android6.0之后危险权限需要动态声明
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 0x11);
} else if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 0x12);
} else {
getWeizhi();
}
}
public void getWeizhi() {
long l = System.currentTimeMillis();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
systemService = (LocationManager) getSystemService(LOCATION_SERVICE);
String provider = systemService.getBestProvider(criteria, true);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
Location location = systemService.getLastKnownLocation(provider);
getLoaction(location);
systemService.requestLocationUpdates(provider, 2000, 10,
locationListener);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode==0x11){
if (grantResults[0]==PackageManager.PERMISSION_GRANTED&&grantResults[1]==PackageManager.PERMISSION_GRANTED){
getWeizhi();
}
else
{
Toast.makeText(this,"没有授权",Toast.LENGTH_SHORT).show();
}
}
}
private void getLoaction(Location location) {
ArrayList<String> dizhi=new ArrayList<>();
String latLongString;
double lat=0;
double lng = 0;
if (location != null) {
lat= location.getLatitude();
lng = location.getLongitude();
latLongString = "纬度:" + lat + "\n经度:" + lng;
} else {
latLongString = "无法获取地理信息";
}
List<Address> addList = null;
Geocoder ge = new Geocoder(this);
try {
//将经纬度转化为街道名
addList = ge.getFromLocation(lat, lng, 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);
latLongString += "\n";
/**
* ad.getCountryName() 国家名 ad.getLocality()城市名 ad.getAdminArea()省名
* ad.getThoroughfare()街道名 ad.getAddressLine(0)周边名
*/
latLongString += ad.getCountryName() + ";" + ad.getLocality()+ad.getAdminArea()+";"+ad.getThoroughfare()+ad.getLocale()+ad.getMaxAddressLineIndex()
+";"+ad.getAddressLine(0);
latLongString +=ad.getAddressLine(1);
dizhi.add(ad.getAddressLine(0));
dizhi.add(ad.getAddressLine(1));
dizhi.add(ad.getAddressLine(2));
dizhi.add(ad.getAddressLine(3));
dizhi.add(ad.getAddressLine(4));
dizhi.add(ad.getAddressLine(5));
dizhi.add(ad.getAddressLine(6));
dizhi.add(ad.getAddressLine(7));
dizhi.add(ad.getAddressLine(8));
dizhi.add(ad.getAddressLine(9));
}
}
weizhi.setText("您当前的位置是:\n" +latLongString);
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,dizhi);
listview.setAdapter(adapter);
}
}
LocationManager定位获取经纬度并且转换成城市
最新推荐文章于 2023-12-01 10:35:37 发布