android - 当前纬度和经度未显示
问题描述
我正在 Android Studio 中制作一个应用程序,用户可以在其中将他们当前的纬度和经度保存在 Firebase 中。我正在使用这段代码:
public class SaveLocationActivity extends AppCompatActivity implements LocationListener {
TextView saveLatitude, saveLongitude;
Button saveLocationBtn;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
LocationManager locationManager;
Double latitude,longitude;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_save_location);
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference = firebaseDatabase.getReference().child("User");
saveLatitude = findViewById(R.id.saveLatitude);
saveLongitude = findViewById(R.id.saveLongitude);
saveLocationBtn = findViewById(R.id.saveLocationBtn);
if (ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION}, 101);
}
saveLocationBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getLocation();
}
});
}
public void getLocation() {
try {
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 5, SaveLocationActivity.this);
}
catch (SecurityException e)
{
e.printStackTrace();
}
}
@Override
public void onLocationChanged(Location location)
{
latitude=location.getLatitude();
String latStr=latitude.toString();
longitude=location.getLongitude();
String longStr=longitude.toString();
saveLatitude.setText(latStr);
saveLongitude.setText(longStr);
databaseReference.push().setValue("Latitude : "+latStr);
databaseReference.push().setValue("Longitude : "+longStr);
Toast.makeText(SaveLocationActivity.this, "Location Saved !!!", Toast.LENGTH_LONG).show();
Intent i=new Intent(SaveLocationActivity.this,DisplayProfile.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
SaveLocationActivity.this.finish();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(SaveLocationActivity.this, "Please Enable GPS and Internet !!!", Toast.LENGTH_SHORT).show();
}
}
现在,每当我在手机中运行此应用程序时,它都会显示 Toast 消息“请启用 GPS 和 Internet !!!” 尽管我在电话中打开了我的位置,并且也有一个有效的互联网连接。我实际上正在使用我的家庭 wifi 进行互联网连接。如果有人在我的代码中发现任何错误,请告诉我也请建议我一个可能的解决方案。
解决方案
您是否已将此权限添加到清单中?
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
推荐阅读
- python - 继承和查询模型后缺少属性
- django - 获取 json 文件中价格大于给定价格的所有条目
- node.js - 以编程方式停止/开始执行步进功能
- oracle - 对值进行四舍五入的查询或函数
- php - 一个回声中有多个回声语句?
- amazon-web-services - 在 AWS 中将大型镶木地板文件转换为 csv
- testing - 用于生成多个单独测试的 Rust 宏
- asp.net-core - .NetCore 5 会话在发布后未启动
- python - config.ini 文件加载后如何跳过多行代码?
- javascript - 单击时如何将 Html.PasswordFor 更改为 Html.TextboxFor?