অ্যান্ড্রয়েডে মোবাইল ডিভাইসের অক্ষাংশ এবং দ্রাঘিমাংশ কীভাবে পাবেন?


183

লোকেশন সরঞ্জাম ব্যবহার করে অ্যান্ড্রয়েডে আমি মোবাইল ডিভাইসের বর্তমান অক্ষাংশ এবং দ্রাঘিমাংশ কীভাবে পেতে পারি?

উত্তর:


337

ব্যবহার করুন LocationManager

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double longitude = location.getLongitude();
double latitude = location.getLatitude();

কলটি getLastKnownLocation()ব্লক করবে না - যার অর্থ nullবর্তমানে কোনও অবস্থান উপলব্ধ না হলে এটি ফিরে আসবে - সুতরাং আপনি সম্ভবত পরিবর্তে পদ্ধতিতে একটি পাস LocationListenerকরার দিকে নজর রাখতে চান , এটি আপনাকে আপনার অবস্থানের অ্যাসিনক্রোনাস আপডেট দেয়।requestLocationUpdates()

private final LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
        longitude = location.getLongitude();
        latitude = location.getLatitude();
    }
}

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener);

আপনি জিপিএস ব্যবহার করতে চাইলে আপনার অ্যাপ্লিকেশনটিকে ACCESS_FINE_LOCATIONঅনুমতি দেওয়া দরকার।

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

আপনি যখন জিপিএস উপলব্ধ না হয় তার জন্য ACCESS_COARSE_LOCATIONঅনুমতি যুক্ত করতে এবং getBestProvider()পদ্ধতিটির সাহায্যে আপনার অবস্থান সরবরাহকারী নির্বাচন করতে পারেন ।


এই এমুলেটর কাজ করবে। এই কোডটি এমুলেটরটিতে লতি এবং লঙ্গি দেখায় ???????
শুক্র

3
আপনি আর চান না এমন আপডেটগুলি পাওয়া বন্ধ করার জন্য আপনার অনপেজ (বা যেখানে প্রয়োজন সেখানে) আপডেটগুলি সরিয়ে ফেলা নিশ্চিত হওয়া উচিত। -> lm.removeUpdates (লোকেশনলিস্টনার);
সুইফ্টি ম্যাকউইফটার্টন

GetLastLocation কতটা সঠিক?
রুচির বড়োনিয়া

1
আপনি যদি ইতিমধ্যে ACCESS_FINE_LOCATION অনুমতি ব্যবহার করছেন তবে আপনার স্পষ্টতই মোটা জায়গার অনুমতি সক্ষম হয়েছে: "আপনি যদি NETWORK_PROVIDER এবং GPS_PROVIDER উভয়ই ব্যবহার করছেন তবে আপনার কেবলমাত্র ACCESS_FINE_LOCATION অনুমতি অনুরোধ করতে হবে, কারণ এতে উভয় সরবরাহকারীদের অনুমতি রয়েছে" " developer.android.com/guide/topics/location/strategies.html
হুগো অ্যালেক্সিস কার্ডোনা

1
আমি এই কোডটি এবং নেডেড অনুমতি ব্যবহার করেছি তবে দ্রাঘিমাংশ এবং অক্ষাংশ শূন্য..এখানে ত্রুটিটি কোথায়?
বাহা সালাহাল্ডিন

41

LocationFinderজিপিএসের অবস্থান সন্ধানের জন্য এখানে ক্লাস দেওয়া আছে। এই শ্রেণি কল করবে MyLocation, যা ব্যবসা করবে।

LocationFinder

public class LocationFinder extends Activity {

    int increment = 4;
    MyLocation myLocation = new MyLocation();

    // private ProgressDialog dialog;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.intermediat);
        myLocation.getLocation(getApplicationContext(), locationResult);

        boolean r = myLocation.getLocation(getApplicationContext(),
            locationResult);

        startActivity(new Intent(LocationFinder.this,
        // Nearbyhotelfinder.class));
            GPSMyListView.class));
        finish();
    }

    public LocationResult locationResult = new LocationResult() {

        @Override
        public void gotLocation(Location location) {
            // TODO Auto-generated method stub
            double Longitude = location.getLongitude();
            double Latitude = location.getLatitude();

            Toast.makeText(getApplicationContext(), "Got Location",
                Toast.LENGTH_LONG).show();

            try {
                SharedPreferences locationpref = getApplication()
                    .getSharedPreferences("location", MODE_WORLD_READABLE);
                SharedPreferences.Editor prefsEditor = locationpref.edit();
                prefsEditor.putString("Longitude", Longitude + "");
                prefsEditor.putString("Latitude", Latitude + "");
                prefsEditor.commit();
                System.out.println("SHARE PREFERENCE ME PUT KAR DIYA.");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };

    // handler for the background updating

}

আমার অবস্থান

public class MyLocation {

    Timer timer1;
    LocationManager lm;
    LocationResult locationResult;
    boolean gps_enabled=false;
    boolean network_enabled=false;

    public boolean getLocation(Context context, LocationResult result)
    {
        //I use LocationResult callback class to pass location value from MyLocation to user code.
        locationResult=result;
        if(lm==null)
            lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

        //exceptions will be thrown if provider is not permitted.
        try{gps_enabled=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){}
        try{network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){}

        //Toast.makeText(context, gps_enabled+" "+network_enabled,     Toast.LENGTH_LONG).show();

        //don't start listeners if no provider is enabled
        if(!gps_enabled && !network_enabled)
            return false;

        if(gps_enabled)
            lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps);
        if(network_enabled)
            lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);
        timer1=new Timer();


        timer1.schedule(new GetLastLocation(), 10000);
    //    Toast.makeText(context, " Yaha Tak AAya", Toast.LENGTH_LONG).show();
        return true;
    }

    LocationListener locationListenerGps = new LocationListener() {
        public void onLocationChanged(Location location) {
            timer1.cancel();
            locationResult.gotLocation(location);
            lm.removeUpdates(this);
            lm.removeUpdates(locationListenerNetwork);
        }
        public void onProviderDisabled(String provider) {}
        public void onProviderEnabled(String provider) {}
        public void onStatusChanged(String provider, int status, Bundle extras) {}
    };

    LocationListener locationListenerNetwork = new LocationListener() {
        public void onLocationChanged(Location location) {
            timer1.cancel();
            locationResult.gotLocation(location);
            lm.removeUpdates(this);
            lm.removeUpdates(locationListenerGps);
        }
        public void onProviderDisabled(String provider) {}
        public void onProviderEnabled(String provider) {}
        public void onStatusChanged(String provider, int status, Bundle extras) {}
    };

    class GetLastLocation extends TimerTask {
        @Override

        public void run() {

            //Context context = getClass().getgetApplicationContext();
             Location net_loc=null, gps_loc=null;
             if(gps_enabled)
                 gps_loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
             if(network_enabled)
                 net_loc=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

             //if there are both values use the latest one
             if(gps_loc!=null && net_loc!=null){
                 if(gps_loc.getTime()>net_loc.getTime())
                     locationResult.gotLocation(gps_loc);
                 else
                     locationResult.gotLocation(net_loc);
                 return;
             }

             if(gps_loc!=null){
                 locationResult.gotLocation(gps_loc);
                 return;
             }
             if(net_loc!=null){
                 locationResult.gotLocation(net_loc);
                 return;
             }
             locationResult.gotLocation(null);
        }
    }

    public static abstract class LocationResult{
        public abstract void gotLocation(Location location);
    }
}

ভাল কাজের মানুষ .. !!! উপরের কোডটি কাজ করছে না তবে আপনার কোডটি ঠিকঠাক কাজ করছে, !!
আশ্চর্যজনক

21
@ স্যান্ডি এই মন্তব্যটি টোস্ট.মেকটেক্সট (প্রসঙ্গ, "ইয়াহা তাক আয়া", টোস্ট। এলএনজিথ_লং)। শো (); +1
রূপেশ

@ স্যান্ডি হ্যাঁ এটি থেকে কীভাবে অক্ষাংশ এবং দ্রাঘিমাংশ পাবেন। এই নির্বোধ প্রশ্নের জন্য দুঃখিত
রূপেশ

গোটলোকেশনের অভ্যন্তর থেকে অক্ষাংশ এবং দ্রাঘিমাংশ পাওয়ার সাথে অবশেষে আমার সমস্যার সর্বোত্তম সমাধান খুঁজে পেয়েছি। ভাগ করা পছন্দগুলি এটি সমাধান করে। ধন্যবাদ!
জিই

@ rup35h আপনি কিছু মিস করছেন! (সিস্টেম.আউট.প্রিন্টলন ("শেয়ার করুন অগ্রাধিকারটি আমাকে পিছু কর দিন।")) +1
উজায়ের কায়সার

20

সঙ্গে googleজিনিষ খুব প্রায়ই পরিবর্তন: আগের উত্তর আমার জন্য কাজ অ।

আপনি এখানে এটি কীভাবে ব্যবহার করেন তা এই গুগল প্রশিক্ষণের উপর ভিত্তি করে

সংযুক্ত অবস্থান সরবরাহকারী

এর জন্য গুগল প্লে পরিষেবাদি সেট আপ করা দরকার

ক্রিয়াকলাপ শ্রেণি

public class GPSTrackerActivity extends AppCompatActivity implements
    GoogleApiClient.ConnectionCallbacks,     
 GoogleApiClient.OnConnectionFailedListener {

private GoogleApiClient mGoogleApiClient;
Location mLastLocation;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (mGoogleApiClient == null) {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
    }

}

protected void onStart() {
    mGoogleApiClient.connect();
    super.onStart();
}

protected void onStop() {
    mGoogleApiClient.disconnect();
    super.onStop();
}

@Override
public void onConnected(Bundle bundle) {
    try {

        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
                mGoogleApiClient);
        if (mLastLocation != null) {
            Intent intent = new Intent();
            intent.putExtra("Longitude", mLastLocation.getLongitude());
            intent.putExtra("Latitude", mLastLocation.getLatitude());
            setResult(1,intent);
            finish();

        }
    } catch (SecurityException e) {

    }

}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

}
}

ব্যবহার

আপনার ক্রিয়াকলাপ

 Intent intent = new Intent(context, GPSTrackerActivity.class);
    startActivityForResult(intent,1);

এবং এই পদ্ধতি

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == 1){
        Bundle extras = data.getExtras();
        Double longitude = extras.getDouble("Longitude");
        Double latitude = extras.getDouble("Latitude");
    }
}

1
এবং অ্যান্ড্রয়েড
ম্যানিফেস্ট

3
@ ডেভিডবিএলএএস 1 অ্যান্ড্রয়েড স্টুডিও আপনার জন্য এখন এই পদক্ষেপটির যত্ন নেয়।
মিনা গ্যাব্রিয়েল

11

আপনি এটি ব্যবহার করে কারেন্ট লেটলং পেতে পারেন

`

  public class MainActivity extends ActionBarActivity {
  private LocationManager locationManager;
  private String provider;
  private MyLocationListener mylistener;
  private Criteria criteria;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


             locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
              // Define the criteria how to select the location provider
              criteria = new Criteria();
              criteria.setAccuracy(Criteria.ACCURACY_COARSE);   //default

              // user defines the criteria

              criteria.setCostAllowed(false); 
              // get the best provider depending on the criteria
              provider = locationManager.getBestProvider(criteria, false);

              // the last known location of this provider
              Location location = locationManager.getLastKnownLocation(provider);

              mylistener = new MyLocationListener();

              if (location != null) {
                  mylistener.onLocationChanged(location);
              } else {
                  // leads to the settings because there is no last known location
                  Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                  startActivity(intent);
              }
              // location updates: at least 1 meter and 200millsecs change
              locationManager.requestLocationUpdates(provider, 200, 1, mylistener);
            String a=""+location.getLatitude();
            Toast.makeText(getApplicationContext(), a, 222).show();

}

private class MyLocationListener implements LocationListener {

      @Override
      public void onLocationChanged(Location location) {
        // Initialize the location fields



          Toast.makeText(MainActivity.this,  ""+location.getLatitude()+location.getLongitude(),
                    Toast.LENGTH_SHORT).show()  

      }

      @Override
      public void onStatusChanged(String provider, int status, Bundle extras) {
          Toast.makeText(MainActivity.this, provider + "'s status changed to "+status +"!",
                    Toast.LENGTH_SHORT).show();
      }

      @Override
      public void onProviderEnabled(String provider) {
          Toast.makeText(MainActivity.this, "Provider " + provider + " enabled!",
            Toast.LENGTH_SHORT).show();

      }

      @Override
      public void onProviderDisabled(String provider) {
          Toast.makeText(MainActivity.this, "Provider " + provider + " disabled!",
            Toast.LENGTH_SHORT).show();
      }
  }         

`


4

উপরের সমাধানগুলিও সঠিক, তবে কিছু সময় যদি অবস্থানটি শূন্য থাকে তবে এটি অ্যাপটি ক্র্যাশ করে বা সঠিকভাবে কাজ করছে না। অ্যান্ড্রয়েডের অক্ষাংশ এবং দ্রাঘিমাংশ পাওয়ার সেরা উপায় হ'ল:

 Geocoder geocoder;
     String bestProvider;
     List<Address> user = null;
     double lat;
     double lng;

    LocationManager lm = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE);

     Criteria criteria = new Criteria();
     bestProvider = lm.getBestProvider(criteria, false);
     Location location = lm.getLastKnownLocation(bestProvider);

     if (location == null){
         Toast.makeText(activity,"Location Not found",Toast.LENGTH_LONG).show();
      }else{
        geocoder = new Geocoder(activity);
        try {
            user = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
        lat=(double)user.get(0).getLatitude();
        lng=(double)user.get(0).getLongitude();
        System.out.println(" DDD lat: " +lat+",  longitude: "+lng);

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

এই ক্লাসগুলির মধ্যে কি নামে স্থান রয়েছে?
ল্যারিবড

1

সেরা উপায়

অনুমতি ম্যানিফেস্ট ফাইল যোগ করুন

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

তারপরে আপনি জিপিএস লোকেশন পেতে পারেন বা জিপিএস লোকেশন যদি না পাওয়া যায় তবে এই ফাংশনটি নেটওয়ার্কের অবস্থানটি ফিরিয়ে দেয়

    public static Location getLocationWithCheckNetworkAndGPS(Context mContext) {
    LocationManager lm = (LocationManager)
            mContext.getSystemService(Context.LOCATION_SERVICE);
    assert lm != null;
    isGpsEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
    isNetworkLocationEnabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

    Location networkLoacation = null, gpsLocation = null, finalLoc = null;
    if (isGpsEnabled)
        if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

            return null;
        }gpsLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if (isNetworkLocationEnabled)
        networkLoacation = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

    if (gpsLocation != null && networkLoacation != null) {

        //smaller the number more accurate result will
        if (gpsLocation.getAccuracy() > networkLoacation.getAccuracy())
            return finalLoc = networkLoacation;
        else
            return finalLoc = gpsLocation;

    } else {

        if (gpsLocation != null) {
            return finalLoc = gpsLocation;
        } else if (networkLoacation != null) {
            return finalLoc = networkLoacation;
        }
    }
    return finalLoc;
}

আপনার ইন্টারনেট এবং জিপিএস রাজ্য পরীক্ষক ফাংশন ভাগ করুন?
মোঃ রেজাউল করিম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.