위치를 자동으로 업데이트해야하는 간단한 Android 응용 프로그램을 작성 중입니다. 자동 업데이트 위치는 응용 프로그램을 다시 시작할 때 업데이트 될뿐만 아니라 응용 프로그램이 켜져있을 때마다 자동 업데이트해야합니다. 이 응용 프로그램은 자동차 안에 넣어 GPS 시스템과 동일하게 보입니다. 정확한 위치를 얻고 항상 현재 위치를 업데이트합니다. 나는 여기서 똑같은 것을 원한다. 나는이 응용 프로그램을 안드로이드 2.2에 구축하고 있습니다.응용 프로그램을 다시 시작하지 않고 위치를 자동으로 업데이트합니다.
여기 내 코드입니다 :
package com.example.map;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.widget.TextView;
import android.widget.Toast;
public class MapActivity extends Activity implements LocationListener{
private TextView latituteField, longitudeField, accuracyField, altitudeField, bearingField;
private LocationManager locationManager;
private String provider;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
latituteField = (TextView) findViewById(R.id.TextView02);
longitudeField = (TextView) findViewById(R.id.TextView04);
accuracyField = (TextView) findViewById(R.id.textView1);
altitudeField = (TextView) findViewById(R.id.textView2);
bearingField = (TextView) findViewById(R.id.textView4);
// Get the location manager
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// Define the criteria how to select the locatioin provider -> use default
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);
// Initialize the location fields
if (location != null) {
System.out.println("Provider " + provider + " has been selected.");
onLocationChanged(location);
} else {
latituteField.setText("Location not available");
longitudeField.setText("Location not available");
}
}
/* Request updates at startup */
@Override
protected void onResume() {
super.onResume();
locationManager.requestLocationUpdates(provider, 400, 1, this);
}
/* Remove the locationlistener updates when Activity is paused */
@Override
protected void onPause() {
super.onPause();
locationManager.removeUpdates(this);
}
@Override
public void onLocationChanged(Location location) {
int lat = (int) (location.getLatitude());
int lng = (int) (location.getLongitude());
int acc = (int) (location.getAccuracy());
int alt = (int) (location.getAltitude());
int bearing = (int) (location.getBearing());
latituteField.setText(String.valueOf(lat));
longitudeField.setText(String.valueOf(lng));
accuracyField.setText(String.valueOf(acc));
altitudeField.setText(String.valueOf(alt));
bearingField.setText(String.valueOf(bearing));
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
Toast.makeText(this, "Enabled new provider " + provider,
Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(this, "Disabled provider " + provider,
Toast.LENGTH_SHORT).show();
}
응용 프로그램을 다시 시작 메신저 (내가 응용 프로그램이 다음 응용 프로그램으로 돌아가 종료) 때 그것은 단지 위치 값을 업데이트 코드. 위치가 뷰 텍스트에서 업데이트됩니다.
나는 또한 노력하고 있습니다. 이렇게.
if(location != null){
do{
System.out.println("Provider " + provider + " has been selected.");
onLocationChanged(location);
locationManager.requestLocationUpdates(provider, 0, 0, this);
}while(location != null);
}
else{
latituteField.setText("Location not available");
longitudeField.setText("Location not available");
}
메신저에 추가하는 중입니다.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.INTERNET" />
그러나이 코드는 실제 휴대 전화에서 응용 프로그램을 중단시킵니다. 이 일을 끝내기 위해 어쨌든 거기에 있습니까?
* 참고 : 실제 응용 프로그램에서이 응용 프로그램을 테스트하고 현재 위치를 얻으려고합니다. textview는 응용 프로그램을 일시 중지하거나 종료하지 않고 위치의 새 값을 가져올 때마다 변경되는 것으로 가정합니다.
매니페스트에 어떤 권한이 있습니까? –
@tedHopp 내 게시물을보세요. 나는 이미 내가 사용했던 허가서를 편집했다. –
실제 전화에서 충돌 할 때 logcat은 무엇을 말하고 있는가? –