Android 使用 LocationListener 和 LocationManager 的工作室项目似乎没有 运行

Android studio Project Using LocationListener and LocationManager doesn't seem to run

我编写并编译了下面的程序,运行 但是我从 运行 它在我的 phone 上。 有两个位置输出变量,speedourSpe,因为 ourSpe 来自我观看的一个 youtube 视频,但它不起作用,而 speed 来自堆栈溢出问题我抬头看了看。两者都有帮助,但都没有得到打印出来的结果我按下按钮 spedButt。我想我只是按错误的顺序编写了代码,但我也不确定我是否在使用 LocationManager 正确。

布局文件在 Relativelayout 中只有两个 textViews 和一个 Button,但堆栈溢出一直给我一个错误,我也想不出那个。我今天过得很糟糕。

主要代码

    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);
                }
            }
        });

    }

回答我自己的问题,这段代码自动弹出,但仍然需要一个请求权限的子句。

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);