আমি কীভাবে কোনও দৈহিক ডিভাইসে (নেক্সাস ওয়ান) আমার অবস্থানকে উপহাস করতে পারি? আমি জানি আপনি এমুলেটর কন্ট্রোল প্যানেলে এমুলেটর দিয়ে এটি করতে পারেন তবে এটি কোনও দৈহিক ডিভাইসের জন্য কাজ করে না।
আমি কীভাবে কোনও দৈহিক ডিভাইসে (নেক্সাস ওয়ান) আমার অবস্থানকে উপহাস করতে পারি? আমি জানি আপনি এমুলেটর কন্ট্রোল প্যানেলে এমুলেটর দিয়ে এটি করতে পারেন তবে এটি কোনও দৈহিক ডিভাইসের জন্য কাজ করে না।
উত্তর:
মনে হচ্ছে এটি করার একমাত্র উপায় হ'ল মক লোকেশন সরবরাহকারী।
আপনাকে আপনার সেটিংসে বিকাশকারী প্যানেলে মক অবস্থানগুলি সক্ষম করতে হবে এবং যুক্ত করতে হবে
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
আপনার প্রকাশ্যে।
এখন আপনি নিজের কোডে যেতে পারেন এবং আপনার নিজস্ব উপহাস অবস্থান প্রদানকারী তৈরি করতে পারেন এবং এই সরবরাহকারীর অবস্থান নির্ধারণ করতে পারেন।
আপনি যদি এই ফোনটি কেবল ডেভলপমেন্ট ল্যাবটিতে ব্যবহার করেন তবে এমন একটি সুযোগ রয়েছে যা আপনি জিপিএস চিপ সলডার করে ফেলতে পারেন এবং সিরিয়াল বন্দরটি সরাসরি অন্য ডিভাইস থেকে এনএমইএ সিকোয়েন্স সহ ফিড করতে পারেন।
আমি যদি আমার তার হাতের কাজ করতে চান। আমি জানি আপনি এমুলেটরটির অবস্থান পরিবর্তন করতে টেলনেট করতে পারেন
$ telnet localhost 5554
Android Console: type 'help' for a list of commands
OK
geo fix -82.411629 28.054553
OK
আপনি যদি আপনার ডিভাইসে টেলনেট করতে পারেন তবে আমি মনে করতে পারি না তবে আমি মনে করি আপনি এটি করতে পারেন। আশা করি এটা কাজে লাগবে.
আপনার (সিএলআই) এর জন্য অ্যাডবি (অ্যান্ড্রয়েড ডিবাগিং ব্রিজ) লাগবে।
আপনি লোকাল সার্ভিসেস অনুমতিটি অবস্থানকে উপহাস করার জন্য ব্যবহার করতে পারেন ...
"android.permission.ACCESS_MOCK_LOCATION"
এবং তারপরে আপনার জাভা কোডে,
// Set location by setting the latitude, longitude and may be the altitude...
String[] MockLoc = str.split(",");
Location location = new Location(mocLocationProvider);
Double lat = Double.valueOf(MockLoc[0]);
location.setLatitude(lat);
Double longi = Double.valueOf(MockLoc[1]);
location.setLongitude(longi);
Double alti = Double.valueOf(MockLoc[2]);
location.setAltitude(alti);
আমি নিম্নলিখিত কোড দিয়ে সাফল্য পেয়েছি। তবে এটি কোনও কারণে আমাকে একটি লক পেয়েছে (যদিও আমি বিভিন্ন ল্যাটলং জোড়া চেষ্টা করেছি), এটি আমার পক্ষে কাজ করেছিল। mLocationManager
এটি একটি LocationManager
যা আপ করা হয় LocationListener
:
private void getMockLocation()
{
mLocationManager.removeTestProvider(LocationManager.GPS_PROVIDER);
mLocationManager.addTestProvider
(
LocationManager.GPS_PROVIDER,
"requiresNetwork" == "",
"requiresSatellite" == "",
"requiresCell" == "",
"hasMonetaryCost" == "",
"supportsAltitude" == "",
"supportsSpeed" == "",
"supportsBearing" == "",
android.location.Criteria.POWER_LOW,
android.location.Criteria.ACCURACY_FINE
);
Location newLocation = new Location(LocationManager.GPS_PROVIDER);
newLocation.setLatitude (/* TODO: Set Some Lat */);
newLocation.setLongitude(/* TODO: Set Some Lng */);
newLocation.setAccuracy(500);
mLocationManager.setTestProviderEnabled
(
LocationManager.GPS_PROVIDER,
true
);
mLocationManager.setTestProviderStatus
(
LocationManager.GPS_PROVIDER,
LocationProvider.AVAILABLE,
null,
System.currentTimeMillis()
);
mLocationManager.setTestProviderLocation
(
LocationManager.GPS_PROVIDER,
newLocation
);
}
setTestProviderStatus
লোকেশনম্যানেজারের সাথে কোনও ইভেন্টের অবহিত / পোস্ট করার জন্য / পোস্ট করার জন্য এখানে ব্যবহার করা হয়েছে যে জিপিএস সরবরাহকারী একটি "এখন" ঠিক করেছে যাতে উল্লিখিত ইভেন্টটির প্রসেসিং ঘটতে পারে।
mLocationManager
একটি LocationManager
যা লোকেশনলাইস্টারের সাথে সংযুক্ত করা হয় " এর অর্থ কী ? কিভাবে আমি এটি করতে পারব? ধন্যবাদ ..
LocationManager
রয়েছে এবং একটি LocationListener
: ব্লগ.ডিয়োটিসওর্সঅ্যান্ড্রয়েড.com
Dr1Ku পোস্ট করেছে কি। কোডটি আজ ব্যবহার করা হয়েছে তবে আরও লোকস যুক্ত করার প্রয়োজন রয়েছে। সুতরাং এখানে কিছু উন্নতি দেওয়া হল:
Alচ্ছিক: পজিশনব্যবস্থাপনা.জি.পি.এস.পি.আরওআইডিআর স্ট্রিং ব্যবহার না করে আপনি নিজের কনস্টেট PROVIDER_NAME সংজ্ঞায়িত করতে এবং এটি ব্যবহার করতে চাইতে পারেন। অবস্থান আপডেটের জন্য নিবন্ধভুক্ত করার সময়, কোনও স্ট্রিং হিসাবে সরাসরি উল্লেখ না করে মানদণ্ডের মাধ্যমে কোনও সরবরাহকারীর চয়ন করুন।
প্রথম: রিমুটেস্টেস্টপ্রাইডারকে কল করার পরিবর্তে প্রথমে কোনও সরবরাহকারী অপসারণ করা হবে কিনা তা পরীক্ষা করে দেখুন (অবৈধআর্গুমেন্টএক্সসেপশন এড়ানোর জন্য):
if (mLocationManager.getProvider(PROVIDER_NAME) != null) {
mLocationManager.removeTestProvider(PROVIDER_NAME);
}
দ্বিতীয়: একাধিক অবস্থান প্রকাশ করতে, আপনাকে অবস্থানের জন্য সময় নির্ধারণ করতে হবে:
newLocation.setTime(System.currentTimeMillis());
...
mLocationManager.setTestProviderLocation(PROVIDER_NAME, newLocation);
এমন একটি গুগল টেস্ট রয়েছে যা মকলোকেশনপ্রোভাইডার ব্যবহার করে: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/location/LocationManagerProximityTest.java
আর একটি ভাল কাজের উদাহরণ পাওয়া যাবে: http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/
আর একটি ভাল নিবন্ধটি হ'ল: http://ballardhack.wordpress.com/2010/09/23/location-gps-and-automated-testing-on-android/#comment-1358 আপনি এমন কিছু যাবেন যা আসলে কাজ করে আমি এমুলেটর উপর।
Mock Provider
অন চালু করার পরে , সাধারণ জিপিএস কাজ করবে না, আমি কোনও ফিক্স পেতে পারি না (আমি সরাসরি কোনও ডিভাইসে পরীক্ষা করছিলাম)। অ্যান্ড্রয়েডে যেহেতু অনেক কিছু ঘটেছিল সেহেতু এটি নাও হতে পারে।
অ্যান্ড্রয়েড মার্কেটে এমন অ্যাপ্লিকেশন রয়েছে যা আপনাকে আপনার ডিভাইসের জন্য একটি "মক জিপিএস অবস্থান" নির্দিষ্ট করার মঞ্জুরি দেয়।
আমি https://market.android.com অনুসন্ধান করেছি এবং "আমার নকল অবস্থান" নামে একটি অ্যাপ্লিকেশন পেয়েছি যা আমার পক্ষে কাজ করে।
উপরে পল দ্বারা উল্লিখিত মক জিপিএস সরবরাহকারী ( http://www.cowlumbus.nl/forum/MockGpsProvider.zip এ ) অন্য একটি উদাহরণ যা উত্স কোড অন্তর্ভুক্ত করে - যদিও আমি প্রদত্ত এপিএকে ইনস্টল করতে সক্ষম হইনি (এটি ব্যর্থতাকে বলেছে) [INSTALL_FAILED_OLDER_SDK] এবং কেবল একটি পুনর্নির্মাণের দরকার হতে পারে)
জিপিএস মক অবস্থানগুলি ব্যবহার করার জন্য আপনার এটিকে আপনার ডিভাইস সেটিংসে সক্ষম করতে হবে। সেটিংস -> অ্যাপ্লিকেশন -> বিকাশে যান এবং "মক অবস্থানের অনুমতি দিন" পরীক্ষা করুন
তারপরে আপনি জিপিএস স্থানাঙ্ক সেট করতে উপরে বর্ণিত অ্যাপগুলির মতো একটি অ্যাপ্লিকেশন ব্যবহার করতে পারেন এবং গুগল মানচিত্র এবং অন্যান্য অ্যাপ্লিকেশনগুলি আপনার নির্দিষ্ট করা মক জিপিএস অবস্থান ব্যবহার করবে।
এটি আমার জন্য কাজ করেছে (অ্যান্ড্রয়েড স্টুডিও):
ফোনে জিপিএস এবং ওয়াইফাই ট্র্যাকিং অক্ষম করুন। অ্যান্ড্রয়েড 5.1.1 এবং নীচে, বিকাশকারী বিকল্পগুলিতে "মক অবস্থানগুলি সক্ষম করুন" নির্বাচন করুন।
Src / debug ডিরেক্টরিতে আপনার ম্যানিফেস্টের একটি অনুলিপি তৈরি করুন। এটিতে নিম্নলিখিতগুলি যুক্ত করুন ("অ্যাপ্লিকেশন" ট্যাগের বাইরে):
ব্যবহার-অনুমতি অ্যান্ড্রয়েড: নাম = "android.permission.ACCESS_MOCK_LOCATION"
"মানচিত্র" নামে একটি মানচিত্রের টুকরো সেট আপ করুন। অনক্রিট () -এ নিম্নলিখিত কোডটি অন্তর্ভুক্ত করুন:
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
ll = new MyLocationListener();
if (lm.getProvider("Test") == null) {
lm.addTestProvider("Test", false, false, false, false, false, false, false, 0, 1);
}
lm.setTestProviderEnabled("Test", true);
lm.requestLocationUpdates("Test", 0, 0, ll);
map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng l) {
Location loc = new Location("Test");
loc.setLatitude(l.latitude);
loc.setLongitude(l.longitude);
loc.setAltitude(0);
loc.setAccuracy(10f);
loc.setElapsedRealtimeNanos(System.nanoTime());
loc.setTime(System.currentTimeMillis());
lm.setTestProviderLocation("Test", loc);
}
};
নোট করুন যে "সেটএলপসড রিলেটাইম ন্যানোস" পদ্ধতিটি ব্যবহার করার জন্য আপনার মডিউল গ্রেড ফাইলটিতে অস্থায়ীভাবে "মিনিডডকভিশন" বাড়াতে হতে পারে।
মূল ক্রিয়াকলাপ শ্রেণীর মধ্যে নিম্নলিখিত কোডটি অন্তর্ভুক্ত করুন:
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
// do whatever you want, scroll the map, etc.
}
}
আপনার অ্যাপটি এএস দিয়ে চালান Run অ্যান্ড্রয়েড .0.০ এবং তার উপরে আপনি একটি সুরক্ষা ব্যতিক্রম পাবেন। এখন সেটিংসে বিকাশকারী বিকল্পগুলিতে যান এবং "মক অবস্থান অ্যাপ্লিকেশন নির্বাচন করুন" নির্বাচন করুন। তালিকা থেকে আপনার অ্যাপ্লিকেশন নির্বাচন করুন।
এখন আপনি যখন মানচিত্রে আলতো চাপবেন, লোকেশনচ্যাঞ্জড () আপনার ট্যাপের স্থানাঙ্কের সাহায্যে গুলি চালাবে।
আমি ঠিক এটি বুঝতে পেরেছি তাই এখন আমার হাতে ফোন নিয়ে পাড়ার আশেপাশে ট্রাম্প করতে হবে না।
আমি প্রাথমিক অবস্থান থেকে চলমান অবস্থানের অনুকরণকারী একটি সাধারণ হ্যান্ডলার তৈরি করেছি।
আপনার সংযোগ কলব্যাক এ এটি শুরু করুন:
private final GoogleApiClient.ConnectionCallbacks mConnectionCallbacks = new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(Bundle bundle) {
if (BuildConfig.USE_MOCK_LOCATION) {
LocationServices.FusedLocationApi.setMockMode(mGoogleApiClient, true);
new MockLocationMovingHandler(mGoogleApiClient).start(48.873399, 2.342911);
}
}
@Override
public void onConnectionSuspended(int i) {
}
};
হ্যান্ডলার শ্রেণি:
private static class MockLocationMovingHandler extends Handler {
private final static int SET_MOCK_LOCATION = 0x000001;
private final static double STEP_LATITUDE = -0.00005;
private final static double STEP_LONGITUDE = 0.00002;
private final static long FREQUENCY_MS = 1000;
private GoogleApiClient mGoogleApiClient;
private double mLatitude;
private double mLongitude;
public MockLocationMovingHandler(final GoogleApiClient googleApiClient) {
super(Looper.getMainLooper());
mGoogleApiClient = googleApiClient;
}
public void start(final double initLatitude, final double initLongitude) {
if (hasMessages(SET_MOCK_LOCATION)) {
removeMessages(SET_MOCK_LOCATION);
}
mLatitude = initLatitude;
mLongitude = initLongitude;
sendEmptyMessage(SET_MOCK_LOCATION);
}
public void stop() {
if (hasMessages(SET_MOCK_LOCATION)) {
removeMessages(SET_MOCK_LOCATION);
}
}
@Override
public void handleMessage(Message message) {
switch (message.what) {
case SET_MOCK_LOCATION:
Location location = new Location("network");
location.setLatitude(mLatitude);
location.setLongitude(mLongitude);
location.setTime(System.currentTimeMillis());
location.setAccuracy(3.0f);
location.setElapsedRealtimeNanos(System.nanoTime());
LocationServices.FusedLocationApi.setMockLocation(mGoogleApiClient, location);
mLatitude += STEP_LATITUDE;
mLongitude += STEP_LONGITUDE;
sendEmptyMessageDelayed(SET_MOCK_LOCATION, FREQUENCY_MS);
break;
}
}
}
আশা করি এটি সাহায্য করতে পারে ..
আইকিয়েসরর দ্বারা উল্লিখিত সমাধান এবং পেড্রো দ্বারা সরবরাহিত http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/ আমার পক্ষে খুব ভাল কাজ করেছে। তবে এটি মক জিপিএস সরবরাহকারীকে সঠিকভাবে শুরু করা, থামানো এবং পুনরায় চালু করার জন্য সমর্থন সরবরাহ করে না।
আমি তার কোডটি কিছুটা পরিবর্তন করেছি এবং ক্লাসটি আবার একটি থ্রেডের পরিবর্তে অ্যাসিঙ্কটাস্কে লিখেছি। এটি আমাদের ইউআই থ্রেডের সাথে যোগাযোগের অনুমতি দেয়, তাই আমরা যখন সরবরাহককে থামিয়েছিলাম তখন আমরা যেখানে ছিলাম সেখানে পুনরায় চালু করতে পারি। যখন স্ক্রিনের ওরিয়েন্টেশন পরিবর্তন হয় তখন এটি কার্যকর হয়।
গ্রহটির জন্য একটি নমুনা প্রকল্পের সাথে কোডটি গিটিহাবটিতে পাওয়া যাবে: https://github.com/paulhoux/Android-MockProviderGPS
বেশিরভাগ কঠোর পরিশ্রম করার জন্য সমস্ত ক্রেডিট পেড্রোর কাছে যেতে হবে।
আপনার ম্যানিফেস্টে যুক্ত করুন
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"
tools:ignore="MockLocation,ProtectedPermissions" />
মক লোকেশন ফাংশন
void setMockLocation() {
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locationManager.addTestProvider(LocationManager.GPS_PROVIDER, false, false,
false, false, true, true, true, 0, 5);
locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
Location mockLocation = new Location(LocationManager.GPS_PROVIDER);
mockLocation.setLatitude(-33.852); // Sydney
mockLocation.setLongitude(151.211);
mockLocation.setAltitude(10);
mockLocation.setAccuracy(5);
mockLocation.setTime(System.currentTimeMillis());
mockLocation.setElapsedRealtimeNanos(System.nanoTime());
locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, mockLocation);
}
আপনার ডিভাইস বিকাশকারী সেটিংসে মক অবস্থানগুলি সক্ষম করতে হবে। যদি তা উপলভ্য না হয়, উপরোক্ত প্রয়োগ হয়ে যাওয়ার পরে আপনার অ্যাপ্লিকেশনটিতে "মক অবস্থান অ্যাপ্লিকেশন" সেট করুন।
গুগল প্লে থেকে ভুয়া জিপিএস অ্যাপটি আমার জন্য কৌশলটি করেছে। অ্যাপের বিবরণে আপনি সমস্ত দিকনির্দেশটি পড়েছেন তা নিশ্চিত করুন। আপনি "ফেক জিপিএস" সক্ষম করার পরে আপনাকে অন্যান্য অবস্থান পরিষেবাদি অক্ষম করতে হবে পাশাপাশি অ্যাপ্লিকেশন শুরু করতে হবে। আমার যা প্রয়োজন তার জন্য দুর্দান্ত কাজ করেছি।
গুগলপ্লেতে অ্যাপটির লিঙ্কটি এখানে: নকল জিপিএস
এটি করার জন্য গুগল টিউটোরিয়ালটি এখানে পাওয়া যাবে, এটি কোডের উদাহরণ সরবরাহ করে এবং প্রক্রিয়াটি ব্যাখ্যা করে।
http://developer.android.com/training/location/location-testing.html#SendMockLocations
জাল জিপিএস অ্যাপ্লিকেশন ইনস্টল করুন https://play.google.com/store/apps/details?id=com.incorolveapps.fakegps.fre&hl=en
বিকাশকারী বিকল্পসমূহ -> মক অবস্থান অ্যাপ্লিকেশন নির্বাচন করুন (এর অর্থ, জাল অবস্থান অ্যাপ্লিকেশন নির্বাচন করা হয়েছে)।
নকল জিপিএস অ্যাপ :
যুক্ত করতে মানচিত্রে ডাবল ট্যাব -> প্লে বোতামটি ক্লিক করুন -> টোস্টটি দেখান "ভুয়া লোকেশন বন্ধ হয়ে গেছে"
অবশেষে গুগল ম্যাপ অ্যাপ্লিকেশনগুলির সাথে চেক করুন।
আমি এমন একটি অ্যাপ্লিকেশন লিখেছি যা আপনার অ্যান্ড্রয়েড ফোনে একটি ওয়েব সার্ভার (আরএসটি-লাইক) চালায়, যাতে আপনি জিপিএসের অবস্থানটি দূর থেকে সেট করতে পারেন । ওয়েবসাইটটি একটি মানচিত্র সরবরাহ করে যেখানে আপনি নতুন অবস্থান নির্ধারণ করতে ক্লিক করতে পারেন বা যে কোনও দিকে যেতে "নষ্ট" কীগুলি ব্যবহার করতে পারেন। অ্যাপ্লিকেশনটি একটি দ্রুত সমাধান ছিল সুতরাং প্রায় কোনও ইউআই বা ডকুমেন্টেশন নেই, তবে বাস্তবায়নটি সরাসরি এগিয়ে রয়েছে এবং আপনি (কেবলমাত্র চারটি) ক্লাসে সবকিছু দেখতে পারেন।
প্রকল্পের সংগ্রহস্থল: https://github.com/juliusmh/RemoteGeoFix
আপনার ডিভাইসটি যদি আপনার কম্পিউটারে প্লাগ ইন করা থাকে এবং এমুলেটর নিয়ন্ত্রণের মাধ্যমে জিপিএস কর্ডগুলি প্রেরণ করার চেষ্টা করা হয়, তবে এটি কার্যকর হবে না।
এটি একটি কারণে একটি ইমুলেটর নিয়ন্ত্রণ।
আপনাকে জিপিএস পরিবর্তনতে আপডেট করার জন্য এটি সেট আপ করুন।
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
ll = new LocationListener() {
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location provider.
onGPSLocationChanged(location);
}
public void onStatusChanged(String provider, int status, Bundle extras) {
bigInfo.setText("Changed "+ status);
}
public void onProviderEnabled(String provider) {
bigInfo.setText("Enabled "+ provider);
}
public void onProviderDisabled(String provider) {
bigInfo.setText("Disabled "+ provider);
}
};
জিপিএস আপডেট হয়ে গেলে আপনি যা চান তা করতে নিম্নলিখিত পদ্ধতিটি পুনরায় লিখুন;
public void onGPSLocationChanged(Location location){
if(location != null){
double pLong = location.getLongitude();
double pLat = location.getLatitude();
textLat.setText(Double.toString(pLat));
textLong.setText(Double.toString(pLong));
if(autoSave){
saveGPS();
}
}
}
আত ম্যানিফেস্টে এই লাগাতে ভুলবেন
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_MOCK_LOCATION
আপনার যদি বিস্তৃত মক লোকেশন সেটআপ দরকার হয় তবে আমি অবাক হই। আমার ক্ষেত্রে একবার আমি স্থির লোকেশন পেয়েছিলাম আমি সেই নতুন লোকেশনটির সাথে কিছু করার জন্য একটি ফাংশন ডাকছিলাম। একটি টাইমার একটি মক অবস্থান তৈরি করুন। এবং পরিবর্তে সেই অবস্থানের সাথে ফাংশনটি কল করুন। অল্প কিছুক্ষণের মধ্যেই সমস্ত কিছু জানতে পেরে জিপিএস আসল বর্তমান অবস্থান নিয়ে আসবে। যা ঠিক আছে। আপনার যদি আপডেটের সময় থাকে তবে যথেষ্ট দীর্ঘ।
হতে পারে এটি 'প্রোগ্রামার' পদ্ধতির নয়, তবে আপনি যদি নিজের সময় বাঁচাতে চান এবং তাত্ক্ষণিকভাবে সমাধান পেতে চান তবে গুগল প্লেতে উপলভ্য লোকের জন্য উত্সর্গীকৃত অ্যাপ্লিকেশনগুলির মধ্যে একটি ব্যবহার করে দেখুন:
অ্যান্ড্রয়েড ফোন এবং ট্যাবলেটগুলির জন্য (নামযুক্ত ক্যাটলস) খুব সুবিধাজনক এবং বিনামূল্যে ইন্টারেক্টিভ লোকেশন সিমুলেটরটি ব্যবহার করুন। এটি সিস্টেম-বিস্তৃত স্তরে (এমনকি গুগল ম্যাপস বা ফেসবুক অ্যাপ্লিকেশনগুলির মধ্যে) জিপিএস-অবস্থানকে উপহাস করে এবং এটি শারীরিক পাশাপাশি ভার্চুয়াল ডিভাইসেও কাজ করে:
ওয়েবসাইট: http://ubicom.snet.tu-berlin.de/catles/index.html
ম্যানিফেস্ট ফাইলটিতে এই অনুমতিটি ব্যবহার করুন
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION">
অ্যান্ড্রয়েড স্টুডিও সুপারিশ করবে যে "মক অবস্থানটি কেবলমাত্র একটি পরীক্ষায় অনুরোধ করা উচিত বা ডিবাগ-নির্দিষ্ট ম্যানিফেস্ট ফাইলে (সাধারণত src / debug / AndroidManLive.xML)" কেবলমাত্র পরিদর্শনটি অক্ষম করুন
এখন নিশ্চিত হয়ে নিন যে আপনি " মক অবস্থানের অনুমতি দিন " পরীক্ষা করেছেন আপনার ফোনের বিকাশকারী সেটিংয়ে "
লোকেশনম্যানেজার ব্যবহার করুন
locationManager.addTestProvider(mocLocationProvider, false, false,
false, false, true, true, true, 0, 5);
locationManager.setTestProviderEnabled(mocLocationProvider, true);
এখন আপনি যেখানে চান অবস্থান সেট করুন
Location mockLocation = new Location(mocLocationProvider);
mockLocation.setLatitude(lat);
mockLocation.setLongitude(lng);
mockLocation.setAltitude(alt);
mockLocation.setTime(System.currentTimeMillis());
locationManager.setTestProviderLocation( mocLocationProvider, mockLocation);
উপরের সমাধানগুলি আমার পক্ষে কার্যকর হয়নি কারণ আমি সর্বশেষে গুগল প্লে পরিষেবাদি সংস্করণ সহ একটি অ্যান্ড্রয়েড ডিভাইসে পরীক্ষা করছি যা ফিউজডলোকেশনপ্রোভাইডার ক্লায়েন্ট ব্যবহার করে । অ্যাপ্লিকেশন ম্যানিফেস্টে মক অবস্থানের অনুমতি এবং অ্যাপ্লিকেশনটিকে বিকাশকারী সেটিংসে পূর্ববর্তী উত্তর হিসাবে উল্লিখিত মক লোকেশন অ্যাপ হিসাবে সেট করা (পূর্ববর্তী উত্তরে উল্লিখিত), পরে আমি নীচের কোটলিন কোডটি যুক্ত করেছি যা সফলভাবে লোকটিকে উপহাস করেছে।
locationProvider = FusedLocationProviderClient(context)
locationProvider.setMockMode(true)
val loc = Location(providerName)
val mockLocation = Location(providerName) // a string
mockLocation.latitude = latitude // double
mockLocation.longitude = longitude
mockLocation.altitude = loc.altitude
mockLocation.time = System.currentTimeMillis()
mockLocation.accuracy = 1f
mockLocation.elapsedRealtimeNanos = SystemClock.elapsedRealtimeNanos()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mockLocation.bearingAccuracyDegrees = 0.1f
mockLocation.verticalAccuracyMeters = 0.1f
mockLocation.speedAccuracyMetersPerSecond = 0.01f
}
// locationManager.setTestProviderLocation(providerName, mockLocation)
locationProvider.setMockLocation(mockLocation)