2013-03-21 3 views
0

신생 안드로이드 개발입니다. 안드로이드에서 GPS를 사용하여 위치를 얻으려고합니다. 저는 GPSTracker와 Activity를위한 두 개의 클래스를 채택했습니다. 위치는 null를 매번 설정지고 내가 로그 캣 체크하면, 다음과 같은 오류가 발생합니다 :native_start 시작에 실패했습니다. 안드로이드 GPS를 탐색하십시오.

나뿐만 아니라 GPS 데이터에 대한 매니페스트의 권한을 설정 한
native_start failed in startNavigating 

. 심지어 에뮬레이터 컨트롤을 사용하여 가짜 위도와 경도를 전달하려고 시도했지만 효과가 없습니다. 이유가 무엇일까요? 나는 안드로이드 2.3

내 코드를 코딩하고 있습니다 : //GPSTracker.java

public class GPSTracker extends Service implements LocationListener { 

    private final Context mcontext; 
    boolean isGPSEnabled = false; 
    boolean canGetLocation = false; 
    double latitude,longitude; 
    Location location; 

    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; 
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; 

    protected LocationManager locationManager; 
    protected LocationListener listener; 

    public GPSTracker(Context context){ 
     this.mcontext = context; 
     getLocation(); 
    } 

    public Location getLocation() { 
     try{ 
      locationManager = (LocationManager) mcontext.getSystemService(LOCATION_SERVICE); 


      listener = new LocationListener() { 

       @Override 
       public void onStatusChanged(String provider, int status, Bundle extras) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onProviderEnabled(String provider) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onProviderDisabled(String provider) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onLocationChanged(Location location1) { 
        // TODO Auto-generated method stub 
        location = location1; 
       } 
      }; 

      isGPSEnabled = locationManager.isProviderEnabled(locationManager.GPS_PROVIDER); 
      if(isGPSEnabled){ 
       this.canGetLocation = true; 
       locationManager.requestLocationUpdates(locationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, listener); 
       Log.d("GPS", "Enabled"); 
       if(locationManager!=null){ 
        location = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER); 
        if(location!=null){ 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 
         //Log.d("Latitude", latitude.toString()); 
         //Log.d("Longitude", longitude.toString()); 
        } 
        else{ 
         Log.d("Location","Null"); 
        } 
       } 
      } 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 

     return location; 
     // TODO Auto-generated method stub 

    } 

    public boolean canGetLocation(){ 
     return this.canGetLocation; 
    } 

    public void showSettingsAlert(){ 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(mcontext); 
     alertDialog.setTitle("GPS Settings"); 
     alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); 

     alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       // TODO Auto-generated method stub 
       Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       mcontext.startActivity(intent); 
      } 
     }); 
     alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
      } 
     }); 

     // Showing Alert Message 
     alertDialog.show(); 
    } 

    @Override 
    public void onLocationChanged(Location arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderDisabled(String arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderEnabled(String arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    public double getLatitude() { 
     // TODO Auto-generated method stub 
     if(location!=null){ 
      Log.d("Location",location.toString()); 
      latitude = location.getLatitude(); 
     } 
     return latitude; 
    } 

    public double getLongitude() { 
     // TODO Auto-generated method stub 
     if(location!=null){ 
      Log.d("Location",location.toString()); 
      longitude = location.getLongitude(); 
     } 
     return longitude; 
    } 
    } 

//LocationActivity.java

public class LocationActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_location); 



     Button button = (Button) findViewById(R.id.button1); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
        GPSTracker gps = new GPSTracker(LocationActivity.this); 
        if(gps.canGetLocation() == false){ 
         Log.d("GPSLogFromActivity","False"); 
         gps.showSettingsAlert(); 
        } 
        else{ 
         double latitude = gps.getLatitude(); 
         System.out.println("Latitude: "+latitude); 
         double longitude = gps.getLongitude(); 
         System.out.println("Longitud: e"+longitude); 

         Log.d("GPSLogFromActivity","True"); 
         Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show(); 
        } 

      } 
     }); 

답변

0
+0

작동하지 않았습니다. 나는 여전히 LogCat ..에서 그것을 얻는다 :/ –

+0

나는 또한 네트워크 공급자로부터 위치를 얻으려는 시도를했다. 권한과 GPSProvider를 네트워크 공급자로 변경 한 후에는 오류를 제거했지만 에뮬레이터 컨트롤에서 데이터를 전달한 후에도 여전히 Null로 위치를 얻었습니다. 이 부분에 완전히 붙어 있습니다. :/ –

+0

안녕 친구 private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 0; private static final long MIN_TIME_BW_UPDATES = 0; 당신은 당신이 그것이 우선합니다 10m의 한 운동 onlocationchamge 방법 **** locationManager.removeUpdate (locationListner 후 의미 당신이 10로 설정 대기 현재 코드의 위치를 ​​얻을 것이다 다음이 0을 유지해야); ****** locationManager.requestLocationUpdates (locationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, listener); NETWORK_PROVIDER에서도 –

관련 문제