জিপিএস বা ইন্টারনেট ব্যবহার না করে ব্যবহারকারীর বর্তমান অবস্থান পাওয়া সম্ভব? আমি মোবাইল নেটওয়ার্ক সরবরাহকারীর সাহায্যে বোঝাতে চাইছি।
জিপিএস বা ইন্টারনেট ব্যবহার না করে ব্যবহারকারীর বর্তমান অবস্থান পাওয়া সম্ভব? আমি মোবাইল নেটওয়ার্ক সরবরাহকারীর সাহায্যে বোঝাতে চাইছি।
উত্তর:
আপনি যা করতে যাচ্ছেন তার LocationManager.NETWORK_PROVIDER
বদলে পজিশনটি পাবেন LocationManager.GPS_PROVIDER
। NETWORK_PROVIDER
GSM- এর বা WiFi উপর ইচ্ছা সমাধানে যা কি কখনো পাওয়া যায়। স্পষ্টতই ওয়াইফাই বন্ধ থাকায়, জিএসএম ব্যবহার করা হবে। মনে রাখবেন যে সেল নেটওয়ার্ক ব্যবহার করা মূলত 500 মিটারের জন্য সঠিক।
http://developer.android.com/guide/topics/location/obtaining-user-location.html এর কিছু সত্যই দুর্দান্ত তথ্য এবং নমুনা কোড রয়েছে।
কোডটি বেশিরভাগের সাথে সম্পন্ন করার পরে এটি OnCreate()
যুক্ত করুন:
// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location provider.
makeUseOfNewLocation(location);
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
আপনার ক্রিয়াকলাপটি LocationListener
ক্লাসটি প্রয়োগ করতে এবং এভাবে আপনার ক্রিয়াকলাপে প্রয়োগ করতে পারে onLocationChanged()
।
পেয়ে getLastKnownLocation
আপনি আসলে নিজেকে ঠিক করতে শুরু করবেন না।
সচেতন হোন যে এটি সরবরাহকারী শুরু করতে পারে তবে ব্যবহারকারী যদি এর আগে কোনও অবস্থান অর্জন করে থাকে তবে আমি তা মনে করি না। ডক্সটি এ সম্পর্কে খুব বেশি পরিষ্কার নয়।
দস্তাবেজ অনুসারে লাস্টকনডলকেশন:
প্রদত্ত সরবরাহকারীর কাছ থেকে প্রাপ্ত সর্বশেষ জ্ঞাত অবস্থান ফিক্স থেকে ডেটা নির্দেশ করে এমন একটি অবস্থান ফেরত দেয়। এটি সরবরাহকারী শুরু না করেই করা যেতে পারে।
এখানে একটি দ্রুত স্নিপেট রয়েছে:
import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import java.util.List;
public class UtilLocation {
public static Location getLastKnownLoaction(boolean enabledProvidersOnly, Context context){
LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Location utilLocation = null;
List<String> providers = manager.getProviders(enabledProvidersOnly);
for(String provider : providers){
utilLocation = manager.getLastKnownLocation(provider);
if(utilLocation != null) return utilLocation;
}
return null;
}
}
আপনাকে এতে নতুন অনুমতিও যুক্ত করতে হবে AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
PASSIVE_PROVIDER
, NETWORK_PROVIDER
এবং GPS_PROVIDER
।
boolean gps_enabled = false;
boolean network_enabled = false;
LocationManager lm = (LocationManager) mCtx
.getSystemService(Context.LOCATION_SERVICE);
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Location net_loc = null, gps_loc = null, finalLoc = null;
if (gps_enabled)
gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (network_enabled)
net_loc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (gps_loc != null && net_loc != null) {
//smaller the number more accurate result will
if (gps_loc.getAccuracy() > net_loc.getAccuracy())
finalLoc = net_loc;
else
finalLoc = gps_loc;
// I used this just to get an idea (if both avail, its upto you which you want to take as I've taken location with more accuracy)
} else {
if (gps_loc != null) {
finalLoc = gps_loc;
} else if (net_loc != null) {
finalLoc = net_loc;
}
}
না, আপনি বর্তমানে জিপিএস বা ইন্টারনেট ব্যবহার না করে অবস্থান পেতে পারবেন না।
ওয়াইফাই, সেলুলার বা ব্লুটুথের উপর ভিত্তি করে অবস্থানের কৌশলগুলি একটি বৃহত ডাটাবেসের সাহায্যে কাজ করে যা নিয়মিত আপডেট হয়। একটি ডিভাইস ট্রান্সমিটার আইডিগুলির জন্য স্ক্যান করে এবং তারপরে এগুলি গুগল, অ্যাপল বা স্কাইহুকের মতো কোনও পরিষেবাতে ইন্টারনেটের মাধ্যমে একটি কোয়েরিতে পাঠায় । সেই পরিষেবাটি পরিচিত স্থানগুলির পূর্ববর্তী ওয়্যারলেস সমীক্ষার ভিত্তিতে একটি অবস্থানের সাথে প্রতিক্রিয়া জানায়। ইন্টারনেট অ্যাক্সেস ব্যতীত আপনার কাছে এই জাতীয় ডেটাবেসের স্থানীয় কপি থাকতে হবে এবং এটি আপ টু ডেট রাখতে হবে। বৈশ্বিক ব্যবহারের জন্য, এটি খুব অবৈধ।
তাত্ত্বিকভাবে, একটি মোবাইল সরবরাহকারী কেবল স্থানীয় ডেটা পরিষেবা সরবরাহ করতে পারে তবে ইন্টারনেটে অ্যাক্সেস করতে পারে না এবং তারপরে মোবাইল ডিভাইস থেকে অবস্থানের প্রশ্নের উত্তর দেয়। মোবাইল সরবরাহকারীরা এটি করেন না; এই জাতীয় সীমাবদ্ধ ডেটা অ্যাক্সেসের জন্য কেউ অর্থ দিতে চায় না। যদি আপনার মোবাইল সরবরাহকারীর মাধ্যমে ডেটা পরিষেবা থাকে তবে আপনার কাছে ইন্টারনেট অ্যাক্সেস রয়েছে।
সংক্ষেপে, লোকেশনম্যানেজার.এনইটওয়র্ককিপ্রোভিডার বা অ্যান্ড্রয়েড.হার্ডওয়্যার.লোকেশন.টওয়ার্ক ব্যবহারের জন্য লোকেশন পেতে ইন্টারনেট ব্যবহার করা দরকার।
সর্বশেষ জ্ঞাত অবস্থানটি ব্যবহার করতে আপনার খুব সম্প্রতি জিপিএস বা ইন্টারনেট অ্যাক্সেস থাকা দরকার। আপনার যদি সবেমাত্র ইন্টারনেট ছিল, সম্ভবত আপনি আবার ইন্টারনেট পেতে আপনার অবস্থান বা সেটিংস সামঞ্জস্য করতে পারেন। আপনার ডিভাইসে যদি জিপিএস বা ইন্টারনেট অ্যাক্সেস না থাকে তবে সর্বশেষ পরিচিত অবস্থান বৈশিষ্ট্য আপনাকে সাহায্য করবে না।
জিপিএস বা ইন্টারনেট ব্যতীত আপনি:
জিপিএস এবং নেটওয়ার্ক সরবরাহকারী ব্যবহার না করে ব্যবহারকারীর বর্তমান অবস্থান পাওয়া সম্ভব।
ঘ। Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"
আপনি কি গুগল ম্যাপস জিওলোকেশন এপি একবার দেখেছেন? গুগল ম্যাপ জিওলোকেশন
এটি সাধারণ রেস্টএপি, আপনার কেবল একটি অনুরোধ পোস্ট করতে হবে, পরিষেবাটি মিটারে নির্ভুলতার সাথে কোনও স্থান ফেরত দেবে।
দেখা যাচ্ছে যে জিপিএস ব্যবহার না করে কোনও স্মার্ট ফোন ট্র্যাক করা সম্ভব।
সূত্র:
প্রাথমিক: "পিনমি: বিশ্বজুড়ে একটি স্মার্টফোন ব্যবহারকারী ট্র্যাকিং"
মাধ্যমিক: "জিপিএস Con বা সম্মতি ছাড়াই সেলফোনটি কীভাবে ট্র্যাক করবেন"
আমি এখনও দলের চূড়ান্ত কোডের একটি লিঙ্ক খুঁজে পাইনি। আমি যখন করব তখন পোস্ট করব, অন্য কেউ যদি তা না করে থাকে।
আপনি এটি করতে টেলিফনিম্যানেজারটি ব্যবহার করতে পারেন।