2013-01-15 36 views
5

Tôi muốn phát triển một ứng dụng trong đó, nếu tôi mở ứng dụng, nó sẽ hiển thị vị trí hiện tại của thiết bị của tôi. Tôi muốn làm điều đó mà không cần sử dụng gps. Tôi đã viết mã cho nó. Nhưng nó sẽ hiển thị vị trí của Hoa Kỳ trong khi mở bản đồ. Tôi muốn nó hiển thị vị trí hiện tại của tôi (Pune, Ấn Độ). Làm cách nào để có được vị trí chính xác gần đúng của tôi?Định vị vị trí hiện tại trong Android mà không cần GPS

Đây là mã của tôi

protected void onCreate(Bundle arg0) { 
    // TODO Auto-generated method stub 
    super.onCreate(arg0); 
    setContentView(R.layout.main); 

    LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 

     LocationListener locListener = new LocationListener(){ 
      public void onLocationChanged(Location loc) 
      { 

      loc.getLatitude(); 
      loc.getLongitude(); 

      String Text = "My current location is: " + 
      "Latitud = " + loc.getLatitude() + 
      "Longitud = " + loc.getLongitude(); 

      Toast.makeText(getApplicationContext(), Text, Toast.LENGTH_SHORT).show(); 
      } 
+0

Tôi đã thêm tất cả các quyền cần thiết như Internet, Thô và vị trí tốt trong tệp kê khai – PrasadM

Trả lời

3

Bạn nên yêu cầu 'mlocManager' để xác định vị trí, và đặt người nghe của nó:

public void getCurrentLocation() 
{ 
    if (mlocManager != null) { 
     mlocManager .requestLocationUpdates(
       LocationManager.NETWORK_PROVIDER, 0, 0, locListener); 
     mlocManager .requestLocationUpdates(
       LocationManager.GPS_PROVIDER, 0, 0, locListener); 
    } 

} 
0

tôi không tìm thấy LocationListener là hữu ích, nhưng cần phải đặt nó trong anyway để ngăn chặn con trỏ null.

// Set the criteria of what to look for 
criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE); 
criteria.setPowerRequirement(Criteria.POWER_LOW); 

// This will find the location of the device via your network, but give user option to use GPS if needed 
String locationprovider = mlocManager.getBestProvider(criteria, 
      true); 

mLoc = mlocManager.getLastKnownLocation(locationprovider); 
if (mLocation != null) 
{ 
    String Text = "My current location is: " + 
    "Latitud = " + mLoc.getLatitude() + 
    "Longitud = " + mLoc.getLongitude(); 
} else 
{ 
    String Text = "No location found." 
} 
9

Đây là Vị trí của tôi Listener để Nhận vị trí bây giờ không có GPS, Sử dụng nhà cung cấp mạng

public class MyLocationListener extends Service implements LocationListener { 

    private static final String TAG = "MyLocationListener"; 

    private Context context = null; 
    private Location location = null; 
    private LocationManager locationManager = null; 

    boolean isNetworkEnabled = false; 
    boolean canGetLocation = false; 

    public double latitude = 0.0; 
    public double longitude = 0.0; 

    // The minimum distance to change Updates in meters 
    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; 
    // The minimum time between updates in milliseconds 
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute 

    public MyLocationListener(Context ctx) { 
     Log.v(TAG + ".MyLocationListener", 
       "MyLocationListener constructor called"); 
     this.context = ctx; 
     getLocationValue(); 
    } 

    public Location getLocationValue() { 
     Log.v(TAG + ".getLocationValue", "getLocationValue method called"); 

     try { 
      locationManager = (LocationManager) context 
        .getSystemService(LOCATION_SERVICE); 

      isNetworkEnabled = locationManager 
        .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

      if (isNetworkEnabled) { 

       // Toast.makeText(context, "Net", 1).show(); 
       Log.v(TAG + ".getLocationValue", "Network provider enabled"); 
       locationManager.requestLocationUpdates(
         LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, 
         MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 

       if (locationManager != null) { 
        location = locationManager 
          .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        if (location != null) { 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 
         Log.v(TAG, "Co-ordinates are: " + latitude + " "+ longitude); 

        } 
       } 

      } else { 
       showSettingsAlert(); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return location; 
    } 

    /** 
    * Stop using GPS listener Calling this function will stop using GPS in your 
    * app 
    * */ 
    public void stopUsingGPS() { 
     if (locationManager != null) { 
      locationManager.removeUpdates(MyLocationListener.this); 
     } 
    } 

    public double getLatitude() { 
     if (location != null) { 
      latitude = location.getLatitude(); 
     } 
     return latitude; 
    } 

    public double getLongitude() { 
     if (location != null) { 
      longitude = location.getLongitude(); 
     } 
     return longitude; 
    } 

    /** 
    * Function to check GPS/wifi enabled 
    * 
    * @return boolean 
    * */ 
    public boolean canGetLocation() { 
     return this.canGetLocation; 
    } 

    /** 
    * Function to show settings alert dialog On pressing Settings button will 
    * lauch Settings Options 
    * */ 
    public void showSettingsAlert() { 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(context); 

     alertDialog.setTitle("GPS Settings"); 
     alertDialog 
       .setMessage("GPS is not enabled. Do you want to go to settings menu?"); 

     alertDialog.setPositiveButton("Settings", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         Intent intent = new Intent(
           Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
         context.startActivity(intent); 
        } 
       }); 
     alertDialog.setNegativeButton("Cancel", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.cancel(); 
        } 
       }); 
     alertDialog.show(); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
    } 

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

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

} 

Chỉ cần gọi trên mã bất cứ khi nào bạn cần hiện tại vị trí tọa độ theo cách này

MyLocationListener mylistner = new MyLocationListener(context); 
     double lat = mylistner.latitude; 
     double lon = mylistner.longitude; 

Hy vọng điều này sẽ giúp bạn

+0

Nó sẽ bật lên 'SettingsAlert' mà không bật GPS! – zionpi

+0

sử dụng lớp Dịch vụ ở đây là gì? – Alvi

Các vấn đề liên quan