2017-11-22 19 views
0

このコードでは、このコードは、初めてエミュレータを実行するときにこのコードだけが動作する場所を取得しようとしています。再度動作させるためにエミュレータを閉じるためにIhaveを実行します。エラー場所がアンドロイドで動作しない

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_insert); 
     myContext = this; 
     position =(TextView)findViewById(R.id.position); 
     locationManager=(LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 


     locationListener = new LocationListener() { 
      @Override 
      public void onLocationChanged(android.location.Location location) { 
       double latitude=location.getLatitude(); 
       double longitude=location.getLongitude(); 
       position.setText("lat:"+latitude+" lon:"+longitude); 
      } 

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

      } 

      @Override 
      public void onProviderEnabled(String provider) { 

      } 

      @Override 
      public void onProviderDisabled(String provider) { 

      } 
     }; 
     if (ContextCompat.checkSelfPermission(this, 
       Manifest.permission.ACCESS_FINE_LOCATION) 
       != PackageManager.PERMISSION_GRANTED) { 

      ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
        101); 
     } 
     else{ 
      Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
      if(location != null){ 

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

    @Override 
    public void onRequestPermissionsResult(int requestCode, 
              String permissions[], int[] grantResults) { 
     try { 
      switch (requestCode) { 
       case 101: { 
        if (grantResults.length > 0 
          && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
         locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
        } else { 
        } 
        return; 
       } 
      } 
     } 
     catch(SecurityException err_permission) { 
     } 
    } 

} 

とのmanifest.xml

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

でこのpermisionしかし、位置がTextViewの上に表示されていない、私は、私が何かを逃していないと思いますI?たぶんcoarse_location許可?Iこのコードで何が間違っているのかわからないのですが、それはlocationmanagerとlistenersを持っています。そしてaksフォーム許可...

+0

と更新し続けるには、あなたのデバッグをしましたここで何が呼び出され、何が呼び出されないのかを確認するコードですか? onLocationChangedで実際の場所を取得するか、それとも決して呼び出されないのですか?後ろに戻り、最後のポイントがコードがまだ動作する場所を確認してください – breakline

答えて

0
 Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     if(location != null){ 

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

あなたが定期的に更新を開始していない場所を持っている場合は、あなたがこれを探していることがあります。

 Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
      locationManager.requestLocationUpdates(
        LocationManager.GPS_PROVIDER, 
        0, 
        0, locationListener); 
     if(location != null){ 
       //Do things with the first location 
     } 

ですから、何かを始めるとリスナー

0

最後に知られている場所がlocationManager.getLastKnownLocationの場合は、場所の更新を要求しません。

関連する問題