아래 프로그램을 작성하고 컴파일하고 실행했습니다. 의도 한 목적은 textView
에 속도를 표시하는 것으로서 내가 할 수있는 한 작동하지 않습니다. 내 휴대 전화에서 실행하지 못했습니다. 두 개의 위치 출력 변수, speed
및 ourSpe
이 있습니다. 왜냐하면 ourSpe
은 내가 본 YouTube 동영상에서 왔고 작동하지 않았기 때문이며 speed
은 조회 한 스택 오버플로 질문에서 나옵니다. 둘 다 도움이되었지만 결과를 얻지 못하고 나는 엉덩이를 인쇄한다. 버튼 spedButt
을 누른다. 나는 방금 잘못된 순서로 코드를 작성했다고 생각하지만 내가 LocationManager
을 올바르게 사용하고 있는지 확실하지 않습니다.LocationListener 및 LocationManager를 사용하는 Android 스튜디오 프로젝트가 실행되지 않는 것 같습니다
레이아웃 파일은 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);
}
}
});
}
위치 권한을 요청 했습니까 ?? https://developer.android.com/training/permissions/requesting.html – Budius
예 @Budius. 나는 매니 페스트와 함께 게시 한 코드에 있습니다. 대화가 결코 터지지 않았지만 프로그램이 결코 런타임 오류를 게임하지 않는다는 것을 알게되었습니다. –
게시 한 코드는 IF가 실패하면 요청해야하는 권한 (r은 분명히 알지 못함)이 있는지 확인하는 경우에만 검사합니다. 나는 여기서 당신을 위해 글을 쓸 시간이 없지만, 문서를 다시 확인해 보면 분명히 그것을 놓치고 있습니다. – Budius