Я написал и скомпилировал программу ниже и запустил ее, но цель, которая должна отображать скорость до textView
, не работает, насколько я могу сказать от запуска его на моем телефоне. Есть две переменные выходного значения, speed
и ourSpe
, потому что ourSpe
пришел из видео youtube. Я смотрел, и это не сработало, и speed
происходит из вопроса переполнения стека, который я поднял. Оба помогли, но ни один из них не получил результат, чтобы распечатать задницу. Я нажимаю кнопку spedButt
. Я думаю, что я просто написал код в неправильном порядке, но я также не уверен, что я правильно использую LocationManager
.Проект студии Android с использованием LocationListener и LocationManager, похоже, не работает
Файл макета имеет только два textViews
и Button
в Relativelayout
, но переполнение стека продолжает давать мне ошибку, и я тоже не могу понять, что это. У меня плохой день.
Главная Код
package com.example.vitaliy_2.safespeedalert;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class SpeedTest extends AppCompatActivity implements LocationListener {
TextView txt;
TextView txt_2;
Button spedButt;
float curSpe;
float speed;
Location l;
Location mLastLocation;
Location pCurrentLocation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_speed_test);
txt = (TextView) findViewById(R.id.speed_display);
txt_2 = (TextView) findViewById(R.id.speed_display_2);
spedButt = (Button) findViewById(R.id.spedButt);
speed = 0;
LocationManager lm = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) !=PackageManager.PERMISSION_GRANTED) {return;}
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
this.onLocationChanged(null);
}
@Override
public void onLocationChanged(final Location location) {
l = location;
if (this.mLastLocation != null)
speed = (float)Math.sqrt(
Math.pow(pCurrentLocation.getLongitude() - mLastLocation.getLongitude(), 2)
+ Math.pow(pCurrentLocation.getLatitude() - mLastLocation.getLatitude(), 2)
)/(pCurrentLocation.getTime() - this.mLastLocation.getTime());
this.mLastLocation = pCurrentLocation;
spedButt.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if(l == null){
txt.setText("-.- m/s");
txt_2.setText("-.- m/s");
}else{
if (pCurrentLocation.hasSpeed())
speed = pCurrentLocation.getSpeed();
curSpe = location.getSpeed();
String sent = speed + "m/s";
txt.setText(sent);
String sentTwo = curSpe + "m/s";
txt_2.setText(sentTwo);
}
}
});
}
Вы запросили разрешение на размещение? https://developer.android.com/training/permissions/requesting.html – Budius
Да @Budius. I Это в коде, который я опубликовал, а также в манифесте. Мне показалось странным, что диалог никогда не появлялся, но программа никогда не запускала мне ошибку времени выполнения. –
код, который вы отправили, только проверяет, имеете ли вы разрешение (r, которое, по-видимому, нет), когда IF не работает, вы должны его запросить. Мне немного времени, чтобы написать для вас здесь, но еще раз проверьте документы, это, конечно, отсутствует. – Budius