Java 如何获得用户';现在的城市是什么?
我想通过Android应用程序获取用户的当前位置。我一直看到错误信息,如果从手机的GPS获取位置出错,应该显示错误信息。你们能告诉我我的密码有什么问题吗 MainActivity.java:Java 如何获得用户';现在的城市是什么?,java,android,android-studio,geolocation,Java,Android,Android Studio,Geolocation,我想通过Android应用程序获取用户的当前位置。我一直看到错误信息,如果从手机的GPS获取位置出错,应该显示错误信息。你们能告诉我我的密码有什么问题吗 MainActivity.java: package com.example.apple.project; import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.loca
package com.example.apple.project;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
private static final int MY_PERMISSIONS_REQUEST_LOCATION = 1;
TextView textView;
Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
Manifest.permission.ACCESS_COARSE_LOCATION)) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSIONS_REQUEST_LOCATION);
} else {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSIONS_REQUEST_LOCATION);
}
} else {
LocationManager mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
try {
textView.setText(hereLocation(location.getLatitude(), location.getLongitude()));
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Not found!",
Toast.LENGTH_SHORT).show();
}
}
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_LOCATION: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
LocationManager mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
try {
textView.setText(hereLocation(location.getLatitude(), location.getLongitude()));
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Not found!",
Toast.LENGTH_SHORT).show();
}
}
} else {
Toast.makeText(MainActivity.this, "No permission granted!", Toast.LENGTH_SHORT).show();
}
return;
}
}
}
public String hereLocation(double lat, double lng) {
String cur_city_name = "";
Geocoder gcd = new Geocoder(MainActivity.this,
Locale.getDefault());
List<Address> addresses;
try {
addresses = gcd.getFromLocation(lat, lng, 1);
if (addresses.size() > 0)
cur_city_name = addresses.get(0).getLocality();
} catch (IOException e) {
e.printStackTrace();
}
Toast.makeText(this, "" + cur_city_name, Toast.LENGTH_SHORT).show();
return cur_city_name;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button"/>
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
package com.example.apple.project;
导入android.Manifest;
导入android.content.Context;
导入android.content.pm.PackageManager;
导入android.location.Address;
导入android.location.Geocoder;
导入android.location.location;
导入android.location.LocationManager;
导入android.os.Bundle;
导入android.support.v4.app.ActivityCompat;
导入android.support.v4.content.ContextCompat;
导入android.support.v7.app.AppActivity;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.io.IOException;
导入java.util.List;
导入java.util.Locale;
公共类MainActivity扩展了AppCompatActivity{
私有静态final int MY_PERMISSIONS_REQUEST_LOCATION=1;
文本视图文本视图;
按钮;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(textView)findViewById(R.id.textView);
按钮=(按钮)findViewById(R.id.button);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
if(ContextCompat.checkSelfPermission)(MainActivity.this,
Manifest.permission.ACCESS\u\u位置)!=PackageManager.permission\u已授予){
如果(ActivityCompat.shouldShowRequestPermissionRegulation)(MainActivity.this,
清单.权限.访问(位置){
ActivityCompat.requestPermissions(MainActivity.this,
新字符串[]{Manifest.permission.ACCESS\u\u LOCATION},MY\u PERMISSIONS\u REQUEST\u LOCATION);
}否则{
ActivityCompat.requestPermissions(MainActivity.this,
新字符串[]{Manifest.permission.ACCESS\u\u LOCATION},MY\u PERMISSIONS\u REQUEST\u LOCATION);
}
}否则{
LocationManager MLLocationManager=(LocationManager)getSystemService(Context.LOCATION\u服务);
Location Location=mlLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
试一试{
setText(hereLocation(location.getLatitude(),location.getLatitude());
}捕获(例外e){
Toast.makeText(getApplicationContext(),“未找到!”,
吐司。长度(短)。show();
}
}
}
});
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,字符串权限[],int[]grantResults){
开关(请求代码){
案例我的权限请求位置:{
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION\u已授予){
if(ContextCompat.checkSelfPermission)(MainActivity.this,
Manifest.permission.ACCESS\u\u LOCATION)==PackageManager.permission\u provided){
LocationManager MLLocationManager=(LocationManager)getSystemService(Context.LOCATION\u服务);
Location Location=mlLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
试一试{
setText(hereLocation(location.getLatitude(),location.getLatitude());
}捕获(例外e){
Toast.makeText(getApplicationContext(),“未找到!”,
吐司。长度(短)。show();
}
}
}否则{
Toast.makeText(MainActivity.this,“未授予任何权限!”,Toast.LENGTH_SHORT.show();
}
返回;
}
}
}
公共管柱位置(双lat、双lng){
字符串cur_city_name=“”;
地理编码器gcd=新地理编码器(MainActivity.this,
Locale.getDefault());
列出地址;
试一试{
地址=gcd.getFromLocation(lat,lng,1);
如果(地址.size()>0)
cur_city_name=addresses.get(0.getLocality();
}捕获(IOE异常){
e、 printStackTrace();
}
Toast.makeText(this,“+cur_city_name,Toast.LENGTH_SHORT).show();
返回当前城市名称;
}
}
活动\u main.xml:
package com.example.apple.project;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
private static final int MY_PERMISSIONS_REQUEST_LOCATION = 1;
TextView textView;
Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
Manifest.permission.ACCESS_COARSE_LOCATION)) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSIONS_REQUEST_LOCATION);
} else {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSIONS_REQUEST_LOCATION);
}
} else {
LocationManager mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
try {
textView.setText(hereLocation(location.getLatitude(), location.getLongitude()));
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Not found!",
Toast.LENGTH_SHORT).show();
}
}
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_LOCATION: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
LocationManager mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
try {
textView.setText(hereLocation(location.getLatitude(), location.getLongitude()));
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Not found!",
Toast.LENGTH_SHORT).show();
}
}
} else {
Toast.makeText(MainActivity.this, "No permission granted!", Toast.LENGTH_SHORT).show();
}
return;
}
}
}
public String hereLocation(double lat, double lng) {
String cur_city_name = "";
Geocoder gcd = new Geocoder(MainActivity.this,
Locale.getDefault());
List<Address> addresses;
try {
addresses = gcd.getFromLocation(lat, lng, 1);
if (addresses.size() > 0)
cur_city_name = addresses.get(0).getLocality();
} catch (IOException e) {
e.printStackTrace();
}
Toast.makeText(this, "" + cur_city_name, Toast.LENGTH_SHORT).show();
return cur_city_name;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button"/>
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
请参阅链接
Geocoder gcd=new Geocoder(context,Locale.getDefault());
列表地址=gcd.getFromLocation(lat,lng,1);
如果(地址.size()>0)
{
System.out.println(addresses.get(0.getLocality());
}
其他的
{
//你的员工呢
}
试试这个,它非常好用
public String getAddress(double lats, double lons) {
Geocoder geocoder;
double lat = lats;
double lon = lons;
geocoder = new Geocoder(YourActivityName.this, Locale.getDefault());
List<android.location.Address> addresses = null;
try {
addresses = geocoder.getFromLocation(lat, lon, 1);
} catch (IOException e) {
e.printStackTrace();
}
if (addresses != null) {
String address = addresses.get(0).getAddressLine(0);
String city = addresses.get(0).getLocality();
String state = addresses.get(0).getAdminArea();
String country = addresses.get(0).getCountryName();
String postalCode = addresses.get(0).getPostalCode();
String knownName = addresses.get(0).getFeatureName();
return address;
} else {
return "failed";
}
}
公共字符串getAddress(双lat,双lons){
地理编码器;
双车床=车床;
双lon=lons;
geocoder=新的geocoder(YourActivityName.this,Locale.getDefault());
列表地址=空;
试一试{
地址=地理编码器。getFromLocation(lat,lon,1);
}捕获(IOE异常){
e、 printStackTrace();
}
如果(地址!=null){
字符串地址=地址.get(0).getAddressLine(0);
字符串city=addresses.get(0.getLocation();
字符串状态=addresses.get(0.getAdminArea();