java - 试图改变用户的位置是不可靠的
问题描述
所以我一直在尝试获取用户的位置,起初我使用一个名为 simple location 的库来让我的生活更轻松。直到我意识到我的一些用户位置变得陈旧。
我可以非常清楚地看到用户在一个位置,但我发送的位置是在最初打开应用程序时返回的。
从那以后,我开始尝试在本地获取该位置,但我运气不佳。当我在监听更改时,它有时会拒绝更新,除非我移动,这不好,因为如果用户静止,我需要获取他们的位置。
public class MainActivity extends AppCompatActivity implements LocationListener {
Button button;
TextView textView;
LocationManager locationManager;
LocationListener locationListener;
public static String lat = "";
public static String lng = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
textView = (TextView) findViewById(R.id.textView);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("Button", "Pressed");
textView.setText("Latitude: " + lat + " Longitude: " + lng);
}
});
locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
locationListener = new MainActivity();
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) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 10, 0, locationListener);
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 10, 0, locationListener);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 10:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
configureLocation();
return;
}
}
@Override
public void onLocationChanged(Location location) {
Log.d("Lat", "lat"+location.getLatitude());
Log.d("Lng", "lng"+location.getLongitude());
lat = String.valueOf(location.getLatitude());
lng = String.valueOf(location.getLongitude());
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
public void configureLocation(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{
Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.INTERNET
}, 10);
}
return;
} else {
locationManager.requestLocationUpdates("gps", 1000, 0, locationListener);
}
}
}
这是我正在使用的测试应用程序。有没有办法在应用程序打开后立即向我提供用户所在位置的最新报告?
解决方案
推荐阅读
- python - 如何将行转换为列,但仅适用于 python 中的表的一部分?
- excel - 引入 SQL 数据并创建大量数据透视表 - 寻找一种方法来消除在代码中引用每个数据透视表的需要
- php - 使用 Redis 缓存 Doctrine 2 查询并生成 Symfony 5
- list - Erlang 内存变量管理
- php - 原则:一个 where 子句中的多个 json_contains 请求
- android - 移动设备和桌面设备中的不同 ui 视图
- php - openssl_encrypt 的密码方法
- android - 变量声明如何影响 onTap 事件?
- c# - 优化Windows服务中的截图检索(C#)
- c# - 数万个粒子的更快嵌套循环