2016-11-30 8 views
0

Я написал и скомпилировал программу ниже и запустил ее, но цель, которая должна отображать скорость до 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); 
       } 
      } 
     }); 

    } 
+0

Вы запросили разрешение на размещение? https://developer.android.com/training/permissions/requesting.html – Budius

+0

Да @Budius. I Это в коде, который я опубликовал, а также в манифесте. Мне показалось странным, что диалог никогда не появлялся, но программа никогда не запускала мне ошибку времени выполнения. –

+0

код, который вы отправили, только проверяет, имеете ли вы разрешение (r, которое, по-видимому, нет), когда IF не работает, вы должны его запросить. Мне немного времени, чтобы написать для вас здесь, но еще раз проверьте документы, это, конечно, отсутствует. – Budius

ответ

0

Отвечая на мой собственный вопрос, этот код автоматически всплывает, но там по-прежнему должен быть пункт, который просит разрешения.

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
      != PackageManager.PERMISSION_GRANTED) { 


     ActivityCompat.requestPermissions(this, 
       new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1); 


     return; 
    }else{ 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, this); 
    } 
    this.onLocationChanged(null); 

 Смежные вопросы

  • Нет связанных вопросов^_^