java - GPS位置不会显示在手机上
问题描述
我正在尝试从 GPS 获取位置并将其显示在屏幕上,到目前为止我有以下代码:
public class MainActivity extends AppCompatActivity implements LocationListener {
EditText el;
TextView output;
LocationManager lm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
el = (EditText) findViewById(R.id.editText);
output = (TextView) findViewById(R.id.textView2);
output.setMovementMethod(new ScrollingMovementMethod());
output.setText("");
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
output.append("Start");
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_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 1);
output.append("Initially Failed to Grand Permission\n");
return;
}
output.append("\nOutside Permission controle");
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10, 1, this);
output.append("\nYoo");
}
public void send(View v) {
MessageSender messageSender = new MessageSender();
messageSender.execute(el.getText().toString());
output.append("Hello\n");
}
@Override
public void onLocationChanged(@NonNull Location location) {
output.append("Inside location function");
output.append(String.valueOf(location.getLongitude()));
}
}
我还在 android 清单中添加了精细位置和粗略位置的权限。我错过了什么?
我正在使用三星 Galaxy S10
注意 当我在android studio上使用模拟器时,它会显示位置,但是当我使用usb调试器并在我的android设备上运行它时,它不会显示位置
另外 ,即使我在模拟器上运行它,移动笔记本电脑时位置也不会更新,为什么?
解决方案
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10, 1, this);
如果您不允许ACCESS_FINE_LOCATION
,则会导致错误,ACCESS_COARSE_LOCATION
因此您必须询问这些权限。你可以这样做:
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_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 1);
} else {
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10, 1, this);
}
请注意,&&
已更改为||
。基本上,如果未授予权限,此代码会询问权限。如果已授予权限,请调用locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10, 1, this);
如果没有授予权限怎么办?您需要等到授予权限后才能调用requestLocationUpdates
. 在授予权限后调用此方法。
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case 1: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10, 1, this);
return;
}
}
}
将此方法添加到活动中。我用物理设备测试了这段代码,它似乎可以正常工作。
推荐阅读
- salt-stack - 安装 salt-minion throw 错误:包:salt-2018.3.3-1.el7.noarch (salt-latest) 要求:python-psutil
- ios - 如何在swift中使用Weex ios sdk pragma #define WX_EXPORT_METHOD(method)?
- python - 在父类中调用重写的父类方法
- android - 如何获得正确的 IPv6 IP 地址?
- backup - 使用 PlanC 尝试 CrashPlan Home 还原时出错 - “无法打开块清单进行读取”
- javascript - 如何从匿名函数中正确调用外部类方法
- ruby - 为什么 Inspec 在检查 aws_elbs 端口时返回“expected [] to include”?
- c - 从字符串中提取整数并将它们保存到链表中
- laravel - 从 Laravel Nova 中的另一个获取字段值
- scala - 使用大小写匹配优化scala中列表的比较