2016-03-21 35 views
-1

GPS'yi kullanarak hızı ölçmek istiyorum.Android APP'de GPS kullanımı,

Uygulamayı başlatabilirim ancak uygulamayı çalıştırmaya başlarsam duracaktır. Neden?

Özür Android 4.1

kullanarak bu CODE.

Bildirim:

</application> 

    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

</manifest> 

Ana:

public class MainActivity extends Activity{ 
    Context context; 
    TextView output; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R 
       .layout.activity_main); 

     LocationManager locationManager = (LocationManager)this .getSystemService(Context.LOCATION_SERVICE); 
     LocationListener locationListener=new LocationListener() { 
      @Override 
      public void onLocationChanged(Location location) { 
       location.getLatitude(); 

       Toast.makeText(context,"current speed"+location.getSpeed(),Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onStatusChanged(String provider, int status, Bundle extras) { 

      } 

      @Override 
      public void onProviderEnabled(String provider) { 

      } 

      @Override 
      public void onProviderDisabled(String provider) { 

      } 
     }; 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener); 

    } 
} 
LOGCAT: 

önemli özel durum: Ana Proses: hexworx.gpstest PID: 10258 java.lang.NullPointerException: girişimi sanal yöntem çağırmak için android.widget.Toast.makeText (toast.jata:adresindeki android.content.res.Resources android.content.Context.getResources() ' üzerindeki null object reference ()' da (Toast.java:109) .java: de android.location.LocationManager $ ListenerTransport._handleMessage (LocationManager.java:281) de hexworx.gpstest.MainActivity $ 1.onLocationChanged (MainActivity.java:30) de 267) android.location.LocationManager $ ListenerTransport.access $ 000 (LocationManager.java:210) adresinden android.location.LocationManager $ ListenerTransport $ 1.handleMessage (LocationManager.java:226) 01 Android.os.Handler.dispatchMessage (Handler.java:102) adresinde bulunan, android.os.Looper.loop (Looper.java:135) adresinde adresindeki android.app.ActivityThread.main (ActivityThread.java:5272) adresindeki numaralı telefondan java.lang.reflect.Method.invoke (Yerel Yöntem) adresindeki java.lang.reflect.Method.invoke (Yöntem.java:372) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit. java: com.android.internal.os.ZygoteInit.main at 909) (ZygoteInit.java:704) yardım için

teşekkürler! hat

Toast.makeText(context,"current speed"+location.getSpeed(),Toast.LENGTH_SHORT).show();

(tırnaklar olmadan) 'Bu' ile 'bağlam' Değiştir Ayrıca location.getSpeed ​​

() içinde

+0

logcat lütfen olabilir mi? –

+0

Yanıtlama için teşekkürler: LOGCAT –

+0

ekledim Toast –

cevap

1

daima hız döndürmüyordur. konum nesne içinde bir Speed ​​varsa, bkz aşağıdaki yöntemi ile bunu kontrol etmek için:

location.hasSpeed(); 
Önce, sonra iki farklı konum noktalarını GPS [iki (lat, boylam) çiftleri] almak zorunda

Bu iki nokta arasındaki mesafeyi hesaplayın, ikinci güncellemeyi konum (ikinci nokta) alma zamanı ve ardından hızı aşağıdaki gibi hesaplayın: Hız = Mesafe/saat.

GPS konumunun doğruluğunu hesaba katmalısınız, çünkü hatalı doğruluk çok güvenilir olmayan sonuçlar verebilir.

öyle alt doğruluk numarası daha iyi şöyledir: doğruluğu alabilirsiniz:

location.getAccuracy(); 

Ama konumu da, içinde bir doğruluğa sahip olarak kontrol olmayabilir çünkü, kullanmadan önce aşağıdaki gibidir:

location1.distanceTo(location2); // Returns meters 
:

Ayrıca
location.hasAccuracy() 

iki Lokasyon nesneler arasındaki mesafeyi hesaplamak için kullanabilir Bu hat da

:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener); 

isteğin her 0ms ve/veya her 0 metre günceller. Çok sık yer güncellemesini almak çok güvenilmezdir ve uygulamanıza hatalara neden olabilir. bu satırı için Değiştir:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,2000,3.0f,locationListener); 

sen (hangisi önce gelirse) güncellemeleri her 2 saniyede veya her 3 metre olsun böylece.

+0

görüntülendiğinde bağlam yerine MainActivity.th kullanın. Şimdi çalışıyor! –

İlgili konular