ডিভাইসে অ্যান্ড্রয়েড মক অবস্থান?


147

আমি কীভাবে কোনও দৈহিক ডিভাইসে (নেক্সাস ওয়ান) আমার অবস্থানকে উপহাস করতে পারি? আমি জানি আপনি এমুলেটর কন্ট্রোল প্যানেলে এমুলেটর দিয়ে এটি করতে পারেন তবে এটি কোনও দৈহিক ডিভাইসের জন্য কাজ করে না।


ডেস্কটপ কম্পিউটারগুলির জন্য আপনি এমন কোনও ড্রাইভার তৈরি / ইনস্টল করতে পারেন যা এই ধরণের পরীক্ষার জন্য কোনও জিপিএস ডিভাইস / সিরিয়াল পোর্ট ডিভাইস অনুকরণ করে। সম্ভবত আপনি অ্যান্ড্রয়েডের জন্য অনুরূপ কিছু তৈরি বা সন্ধান করতে পারেন।
অ্যারোনএলএস

6
মার্কেটে বেশ কয়েকটি অ্যাপ্লিকেশন রয়েছে যা জিপিএসের অবস্থান অনুকরণ করতে পারে। উদাহরণস্বরূপ "লোকেশন স্পোফার"।
ভ্লাদ

স্টোরগুলিতে প্রচুর অ্যাপ রয়েছে যা এটি করে .. আপনি এটি ব্যবহার করতে পারেন - play.google.com/store/apps/… বা এটি - play.google.com/store/apps/…
ইয়াহুদা

1
স্টোরটিতে এমন একটি অ্যাপ্লিকেশন রয়েছে যা "জিও ফিক্স" এবং "জিও এনএমইএ" আদেশগুলি এমুলেটরের মতো সমর্থন করে! play.google.com/store/apps/…
luv

@ আইভির বেশি এটি ওপেন সোর্স github.com/luv/mockgeofix
ভ্লাদ

উত্তর:


166

মনে হচ্ছে এটি করার একমাত্র উপায় হ'ল মক লোকেশন সরবরাহকারী।

আপনাকে আপনার সেটিংসে বিকাশকারী প্যানেলে মক অবস্থানগুলি সক্ষম করতে হবে এবং যুক্ত করতে হবে

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

আপনার প্রকাশ্যে।

এখন আপনি নিজের কোডে যেতে পারেন এবং আপনার নিজস্ব উপহাস অবস্থান প্রদানকারী তৈরি করতে পারেন এবং এই সরবরাহকারীর অবস্থান নির্ধারণ করতে পারেন।


83
বাজারে একটি অ্যাপ্লিকেশন রয়েছে যার নাম "নকল জিপিএস"। আপনি যদি আপনার ডিভাইসে মক অবস্থানগুলি সক্ষম করেন তবে এটি আপনার অবস্থান নির্ধারণের জন্য একটি দুর্দান্ত জিইউআই সরবরাহ করে। আমি বুঝতে পেরেছি যে এটি একটি নিজে-করা সমাধান নয়, তবে দ্রুত পরীক্ষার জন্য অবশ্যই উপযুক্ত সমাধান।
টিম গ্রিন

2
এই একই তারিখ, এবং প্রাসঙ্গিক বিষয়বস্তু - যাদের কাছে লিঙ্কটি হতে পারে।
DefenestrationDay

4
@ টিমগ্রিন আপনার গ্রহণযোগ্য উত্তর হওয়া উচিত (কেবল একটি মন্তব্য নয়)! এখন পর্যন্ত পরীক্ষার সহজতম উপায়
বোস্টোন

আসলে "নকল জিপিএস" অ্যাপ্লিকেশনটি সেরা নয় কারণ এটি কেবলমাত্র অবস্থানগুলি নির্ধারণ করতে এবং এলোমেলোভাবে ঘোরাতে পারে। তাদের নতুন সংস্করণটি রুট করতে পারে তবে এটি কেবলমাত্র অবস্থানের উপরে এত বড় লাফিয়ে যাওয়ার পথটি পুনরুক্ত করে। জানুজের উত্তরটি অবশ্যই সত্য যে আপনার নিজের মক সরবরাহকারী তৈরি করতে হবে। আমরা সম্প্রতি এটি করেছি এবং যদি কারও এটির প্রয়োজন হয় বা যদি এই প্রশ্নের এখনও সহায়তা প্রয়োজন, আমি কোডটি পোস্ট করব।
ভিকনরা

5
"আপনার কোডে যান এবং আপনার নিজের উপকারের স্থান সরবরাহকারী তৈরি করুন" বিবৃতিটি আরও বিশদে ব্যাখ্যা করা উচিত।
দিমস

102

আপনি যদি এই ফোনটি কেবল ডেভলপমেন্ট ল্যাবটিতে ব্যবহার করেন তবে এমন একটি সুযোগ রয়েছে যা আপনি জিপিএস চিপ সলডার করে ফেলতে পারেন এবং সিরিয়াল বন্দরটি সরাসরি অন্য ডিভাইস থেকে এনএমইএ সিকোয়েন্স সহ ফিড করতে পারেন।


68
বিদ্বেষীরা কেন? এই উত্তরটি দুর্দান্তভাবে গুরুত্বপূর্ণ core
বেন জোটো

61
দুর্দান্তভাবে অযৌক্তিকভাবে বেহুদা / অপ্রাসঙ্গিক হলেও কঠোর hardcore
olivervbk

13
যথেষ্ট মজা, যদিও।
এটিয়েন

23
ওম, আমি মনে করি যার জন্য এই উত্তরটি প্রাসঙ্গিক হবে, তারা ইতিমধ্যে জানে যে তারা এটি করতে পারে। আমি সন্দেহ করি যে এই তিন ব্যক্তি সমাধানের জন্য স্ট্যাকওভারফ্লো অনুসন্ধান করছে।
টুলমেকারস্টেভ

10
আপনার বিক্রয়বিহীন ডিভাইসে কীভাবে বাস্তবসম্মত এনএমইএ সিকোয়েন্স তৈরি করা যায় তা বুঝতে যদি আপনার সমস্যা হয় তবে দারুণ একটি বিকল্প রয়েছে: সেখানে সোনার একটি আসল বাহ্যিক জিপিএস ডিভাইস এবং রানার্স / বাইকারদের / দলের একটি দলের শীর্ষে একটি বাস্তব ট্র্যাকের উপর পুরো বিকাশ ল্যাবকে স্থানান্তরিত করুন গাড়ি / প্লেন / আপনি যে গতি অনুকরণ করতে চান তার উপর নির্ভর করে যাই হোক না কেন। বিকাশ ল্যাবের ছাদে একটি গর্ত খুলতে ভুলবেন না যাতে ডিভাইস উপগ্রহ থেকে রেডিও সংকেত পেতে পারে। আপনাকে স্বাগতম. ;-)
স্টাফেন গ্যারিচন

32

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

$ telnet localhost 5554
Android Console: type 'help' for a list of commands
OK
geo fix -82.411629 28.054553
OK

আপনি যদি আপনার ডিভাইসে টেলনেট করতে পারেন তবে আমি মনে করতে পারি না তবে আমি মনে করি আপনি এটি করতে পারেন। আশা করি এটা কাজে লাগবে.

আপনার (সিএলআই) এর জন্য অ্যাডবি (অ্যান্ড্রয়েড ডিবাগিং ব্রিজ) লাগবে।


আপনি আপনার ডিভাইসের কনসোলে কমান্ড হিসাবে প্রেরণ করা সমস্ত কিছুতেই অনুমতি অস্বীকার পাবেন। কোনও টার্মিনাল অ্যাপ্লিকেশনটির মাধ্যমে এটি সম্ভব হয়েছে তবে আমি মনে করি যে এর জন্য রুট অ্যাক্সেস প্রয়োজন
জানুজ্জ

ঠিক তাই আমরা একই পৃষ্ঠায় আছি: আপনি "অ্যাডাব শেল" এর কথা বলছেন না? আমি যে বিষয়ে কথা বলছি তা আলাদা, এটি এমন কিছু সেটআপ যা আপনাকে অ্যান্ড্রয়েড-নির্দিষ্ট পরামিতিগুলি সেট করতে দেয়। আমি জানি, উদাহরণস্বরূপ, আপনি রুট অ্যাক্সেস ছাড়াই পোর্ট ফরওয়ার্ডিং সেট আপ করতে পারেন (যেমন লোকালহোস্ট: 1234 ফোনটিতে: 1234), যাতে আপনি কেবল / ডাব্লু / রুটের মাধ্যমে একটি সোকস প্রক্সি এবং টানেল সেটআপ করতে পারেন।
টিম গ্রিন

আপনি ডিভাইসে 23 পোর্ট করতে আপনার মেশিনে 6000 টি ফরওয়ার্ড পোর্ট 6000 টিসিপি: অ্যাডবি ফরওয়ার্ড টিসিপি ব্যবহার করতে পারেন তবে বন্দরটি খোলা হিসাবে দেখানো হলেও আমি সংযোগ করতে সক্ষম হইনি। ডিভাইসে একটি টেলনেট ক্লায়েন্ট ব্যবহার করা এবং লোকালহোস্টের সাথে সংযোগ করাও ব্যর্থ হয়
জানুজ্জ

15
এটি এমুলেটরটির জন্য দুর্দান্ত কাজ করে তবে প্রকৃত ডিভাইসের জন্য কাজ করে না। সুতরাং এটি
ওপির

4
@ টিমগ্রিন আপনার সমাধানটি কেবল এমুলেটারের জন্য। প্রশ্নটি ছিল আসল যন্ত্র সম্পর্কে about
ইগোরগানাপলস্কি

29

আপনি লোকাল সার্ভিসেস অনুমতিটি অবস্থানকে উপহাস করার জন্য ব্যবহার করতে পারেন ...

"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);

9
MocLocationProvider এর মান কী?
ভিক্টর

উদাহরণস্বরূপ লোকেশন
ম্যানেজার.জি.পি.এস.প্রোভিডার

25

আমি নিম্নলিখিত কোড দিয়ে সাফল্য পেয়েছি। তবে এটি কোনও কারণে আমাকে একটি লক পেয়েছে (যদিও আমি বিভিন্ন ল্যাটলং জোড়া চেষ্টা করেছি), এটি আমার পক্ষে কাজ করেছিল। 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
    );      
}

1
ভাল পোস্ট, সংযোজন জন্য আমার উত্তর নীচে দেখুন।
আইকিয়ারাসর

যতদূর আমার মনে আছে, setTestProviderStatusলোকেশনম্যানেজারের সাথে কোনও ইভেন্টের অবহিত / পোস্ট করার জন্য / পোস্ট করার জন্য এখানে ব্যবহার করা হয়েছে যে জিপিএস সরবরাহকারী একটি "এখন" ঠিক করেছে যাতে উল্লিখিত ইভেন্টটির প্রসেসিং ঘটতে পারে।
Dr1Ku

" mLocationManagerএকটি LocationManagerযা লোকেশনলাইস্টারের সাথে সংযুক্ত করা হয় " এর অর্থ কী ? কিভাবে আমি এটি করতে পারব? ধন্যবাদ ..
ইয়েহুদা

পরিষেবাদি ব্যবহার করে কোনও স্থানের পরিবর্তন কীভাবে চেক করবেন তা ব্যাখ্যা করার জন্য এখানে একটি নিবন্ধ LocationManagerরয়েছে এবং একটি LocationListener: ব্লগ.ডিয়োটিসওর্সঅ্যান্ড্রয়েড.com
2010

2
আপনি যে পদ্ধতিতে সত্য (গুলি) এবং মিথ্যা (গুলি) উপস্থাপন করেছেন তার জন্য প্লাস 1 এর সাথে যুক্ত করুন টেস্টপ্রোভিডার
আলকাদোমি

16

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 আপনি এমন কিছু যাবেন যা আসলে কাজ করে আমি এমুলেটর উপর।


আপনার নিজের সরবরাহকারীকে সংজ্ঞায়িত করার জন্য দুর্দান্ত পরামর্শ, জিপিএসপ্রোভিডার ব্যবহার করার জিনিসটি হ'ল আপনি (স্পষ্টতই) মক সরবরাহকারীকে মুক্তি দিতে পারবেন না (আরও সঠিকভাবে, আপনি স্বাভাবিক জিপিএসে স্যুইচ করতে পারবেন না) রিবুট হওয়া পর্যন্ত। পাশাপাশি দুর্দান্ত পোস্ট, আমি তথ্যসূত্রগুলি পরীক্ষা করে দেখব!
Dr1Ku

@ Dr1KU এখনও কি এমন পরিস্থিতি রয়েছে যে আপনি সাধারণ জিপিএসে ফিরে যেতে পারবেন না? এটি কোথাও নির্দিষ্ট করা আছে?
কাজ ড্রাগন

@ কাজড্রাগন সেই সময়টাতেই এটাই ছিল। আমি যা স্মরণ করতে পারি তা থেকে, Mock Providerঅন চালু করার পরে , সাধারণ জিপিএস কাজ করবে না, আমি কোনও ফিক্স পেতে পারি না (আমি সরাসরি কোনও ডিভাইসে পরীক্ষা করছিলাম)। অ্যান্ড্রয়েডে যেহেতু অনেক কিছু ঘটেছিল সেহেতু এটি নাও হতে পারে।
Dr1Ku

@ Dr1Ku আহ, ভাল, আমি এখন খুব অনুরূপ কিছু করছি এবং আপনার বর্ণিতদের মতো একই ফলাফল পাচ্ছি। আমি প্লাটফর্মটিতে অন্তর্নিহিত কোনও বিধিনিষেধ বা আমি কোথাও কোথাও একটি ফাংশন কল অনুপস্থিত ছিল তা জানতে আমি আশাবাদী ছিলাম। আমার সম্ভবত এটি থেকে একটি প্রশ্ন করা উচিত।
কাজ ড্রাগন

9

অ্যান্ড্রয়েড মার্কেটে এমন অ্যাপ্লিকেশন রয়েছে যা আপনাকে আপনার ডিভাইসের জন্য একটি "মক জিপিএস অবস্থান" নির্দিষ্ট করার মঞ্জুরি দেয়।

আমি https://market.android.com অনুসন্ধান করেছি এবং "আমার নকল অবস্থান" নামে একটি অ্যাপ্লিকেশন পেয়েছি যা আমার পক্ষে কাজ করে।

উপরে পল দ্বারা উল্লিখিত মক জিপিএস সরবরাহকারী ( http://www.cowlumbus.nl/forum/MockGpsProvider.zip এ ) অন্য একটি উদাহরণ যা উত্স কোড অন্তর্ভুক্ত করে - যদিও আমি প্রদত্ত এপিএকে ইনস্টল করতে সক্ষম হইনি (এটি ব্যর্থতাকে বলেছে) [INSTALL_FAILED_OLDER_SDK] এবং কেবল একটি পুনর্নির্মাণের দরকার হতে পারে)

জিপিএস মক অবস্থানগুলি ব্যবহার করার জন্য আপনার এটিকে আপনার ডিভাইস সেটিংসে সক্ষম করতে হবে। সেটিংস -> অ্যাপ্লিকেশন -> বিকাশে যান এবং "মক অবস্থানের অনুমতি দিন" পরীক্ষা করুন

তারপরে আপনি জিপিএস স্থানাঙ্ক সেট করতে উপরে বর্ণিত অ্যাপগুলির মতো একটি অ্যাপ্লিকেশন ব্যবহার করতে পারেন এবং গুগল মানচিত্র এবং অন্যান্য অ্যাপ্লিকেশনগুলি আপনার নির্দিষ্ট করা মক জিপিএস অবস্থান ব্যবহার করবে।


জাল জিপিএস সহজ। আমি কেবল ভাবছি কেন তারা অ্যাপ্লিকেশন অনুমতিতে কলার আইডি জিজ্ঞাসা করছে: এস
গিলাইম ম্যাসেজ

8

এটি আমার জন্য কাজ করেছে (অ্যান্ড্রয়েড স্টুডিও):

ফোনে জিপিএস এবং ওয়াইফাই ট্র্যাকিং অক্ষম করুন। অ্যান্ড্রয়েড 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.০ এবং তার উপরে আপনি একটি সুরক্ষা ব্যতিক্রম পাবেন। এখন সেটিংসে বিকাশকারী বিকল্পগুলিতে যান এবং "মক অবস্থান অ্যাপ্লিকেশন নির্বাচন করুন" নির্বাচন করুন। তালিকা থেকে আপনার অ্যাপ্লিকেশন নির্বাচন করুন।

এখন আপনি যখন মানচিত্রে আলতো চাপবেন, লোকেশনচ্যাঞ্জড () আপনার ট্যাপের স্থানাঙ্কের সাহায্যে গুলি চালাবে।

আমি ঠিক এটি বুঝতে পেরেছি তাই এখন আমার হাতে ফোন নিয়ে পাড়ার আশেপাশে ট্রাম্প করতে হবে না।


আমি মনে করি আপনি এই কোডটি পরিষেবাটিতে রাখলে এটি অ্যান্ড্রয়েড 6 এ কাজ করে
হামজা

7

আমি প্রাথমিক অবস্থান থেকে চলমান অবস্থানের অনুকরণকারী একটি সাধারণ হ্যান্ডলার তৈরি করেছি।

আপনার সংযোগ কলব্যাক এ এটি শুরু করুন:

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;
        }
    }
}

আশা করি এটি সাহায্য করতে পারে ..


6

আইকিয়েসরর দ্বারা উল্লিখিত সমাধান এবং পেড্রো দ্বারা সরবরাহিত http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/ আমার পক্ষে খুব ভাল কাজ করেছে। তবে এটি মক জিপিএস সরবরাহকারীকে সঠিকভাবে শুরু করা, থামানো এবং পুনরায় চালু করার জন্য সমর্থন সরবরাহ করে না।

আমি তার কোডটি কিছুটা পরিবর্তন করেছি এবং ক্লাসটি আবার একটি থ্রেডের পরিবর্তে অ্যাসিঙ্কটাস্কে লিখেছি। এটি আমাদের ইউআই থ্রেডের সাথে যোগাযোগের অনুমতি দেয়, তাই আমরা যখন সরবরাহককে থামিয়েছিলাম তখন আমরা যেখানে ছিলাম সেখানে পুনরায় চালু করতে পারি। যখন স্ক্রিনের ওরিয়েন্টেশন পরিবর্তন হয় তখন এটি কার্যকর হয়।

গ্রহটির জন্য একটি নমুনা প্রকল্পের সাথে কোডটি গিটিহাবটিতে পাওয়া যাবে: https://github.com/paulhoux/Android-MockProviderGPS

বেশিরভাগ কঠোর পরিশ্রম করার জন্য সমস্ত ক্রেডিট পেড্রোর কাছে যেতে হবে।


6

আপনার ম্যানিফেস্টে যুক্ত করুন

<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);
}

আপনার ডিভাইস বিকাশকারী সেটিংসে মক অবস্থানগুলি সক্ষম করতে হবে। যদি তা উপলভ্য না হয়, উপরোক্ত প্রয়োগ হয়ে যাওয়ার পরে আপনার অ্যাপ্লিকেশনটিতে "মক অবস্থান অ্যাপ্লিকেশন" সেট করুন।


3

গুগল প্লে থেকে ভুয়া জিপিএস অ্যাপটি আমার জন্য কৌশলটি করেছে। অ্যাপের বিবরণে আপনি সমস্ত দিকনির্দেশটি পড়েছেন তা নিশ্চিত করুন। আপনি "ফেক জিপিএস" সক্ষম করার পরে আপনাকে অন্যান্য অবস্থান পরিষেবাদি অক্ষম করতে হবে পাশাপাশি অ্যাপ্লিকেশন শুরু করতে হবে। আমার যা প্রয়োজন তার জন্য দুর্দান্ত কাজ করেছি।

গুগলপ্লেতে অ্যাপটির লিঙ্কটি এখানে: নকল জিপিএস



2

জাল জিপিএস অ্যাপ্লিকেশন ইনস্টল করুন https://play.google.com/store/apps/details?id=com.incorolveapps.fakegps.fre&hl=en

বিকাশকারী বিকল্পসমূহ -> মক অবস্থান অ্যাপ্লিকেশন নির্বাচন করুন (এর অর্থ, জাল অবস্থান অ্যাপ্লিকেশন নির্বাচন করা হয়েছে)।

নকল জিপিএস অ্যাপ :

যুক্ত করতে মানচিত্রে ডাবল ট্যাব -> প্লে বোতামটি ক্লিক করুন -> টোস্টটি দেখান "ভুয়া লোকেশন বন্ধ হয়ে গেছে"

অবশেষে গুগল ম্যাপ অ্যাপ্লিকেশনগুলির সাথে চেক করুন।


2

আমি এমন একটি অ্যাপ্লিকেশন লিখেছি যা আপনার অ্যান্ড্রয়েড ফোনে একটি ওয়েব সার্ভার (আরএসটি-লাইক) চালায়, যাতে আপনি জিপিএসের অবস্থানটি দূর থেকে সেট করতে পারেন । ওয়েবসাইটটি একটি মানচিত্র সরবরাহ করে যেখানে আপনি নতুন অবস্থান নির্ধারণ করতে ক্লিক করতে পারেন বা যে কোনও দিকে যেতে "নষ্ট" কীগুলি ব্যবহার করতে পারেন। অ্যাপ্লিকেশনটি একটি দ্রুত সমাধান ছিল সুতরাং প্রায় কোনও ইউআই বা ডকুমেন্টেশন নেই, তবে বাস্তবায়নটি সরাসরি এগিয়ে রয়েছে এবং আপনি (কেবলমাত্র চারটি) ক্লাসে সবকিছু দেখতে পারেন।

প্রকল্পের সংগ্রহস্থল: https://github.com/juliusmh/RemoteGeoFix


1

আপনার ডিভাইসটি যদি আপনার কম্পিউটারে প্লাগ ইন করা থাকে এবং এমুলেটর নিয়ন্ত্রণের মাধ্যমে জিপিএস কর্ডগুলি প্রেরণ করার চেষ্টা করা হয়, তবে এটি কার্যকর হবে না।
এটি একটি কারণে একটি ইমুলেটর নিয়ন্ত্রণ।
আপনাকে জিপিএস পরিবর্তনতে আপডেট করার জন্য এটি সেট আপ করুন।

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


0

আপনার যদি বিস্তৃত মক লোকেশন সেটআপ দরকার হয় তবে আমি অবাক হই। আমার ক্ষেত্রে একবার আমি স্থির লোকেশন পেয়েছিলাম আমি সেই নতুন লোকেশনটির সাথে কিছু করার জন্য একটি ফাংশন ডাকছিলাম। একটি টাইমার একটি মক অবস্থান তৈরি করুন। এবং পরিবর্তে সেই অবস্থানের সাথে ফাংশনটি কল করুন। অল্প কিছুক্ষণের মধ্যেই সমস্ত কিছু জানতে পেরে জিপিএস আসল বর্তমান অবস্থান নিয়ে আসবে। যা ঠিক আছে। আপনার যদি আপডেটের সময় থাকে তবে যথেষ্ট দীর্ঘ।


0

হতে পারে এটি 'প্রোগ্রামার' পদ্ধতির নয়, তবে আপনি যদি নিজের সময় বাঁচাতে চান এবং তাত্ক্ষণিকভাবে সমাধান পেতে চান তবে গুগল প্লেতে উপলভ্য লোকের জন্য উত্সর্গীকৃত অ্যাপ্লিকেশনগুলির মধ্যে একটি ব্যবহার করে দেখুন:

নকল জিপিএস লোকেশন স্পুফার

মক লোকেশন

নকল জিপিএস লোকেশন


1
আপনি কি তাদের চেষ্টা করেছেন? তারা কি প্রশ্নের অনুরোধ অনুযায়ী কাজ করেছে?
arekolek

কোন পছন্দ? বা তাদের সবার কি দরকার? : পি
arekolek

ভুয়া জিপিএস অবস্থান স্পুফার যথেষ্ট ভাল, তবে মক লোকেশনগুলি একটি রুট সেট করার অনুমতি দেয় যা একটি দুর্দান্ত বৈশিষ্ট্য।
ক্লিমাট

0

অ্যান্ড্রয়েড ফোন এবং ট্যাবলেটগুলির জন্য (নামযুক্ত ক্যাটলস) খুব সুবিধাজনক এবং বিনামূল্যে ইন্টারেক্টিভ লোকেশন সিমুলেটরটি ব্যবহার করুন। এটি সিস্টেম-বিস্তৃত স্তরে (এমনকি গুগল ম্যাপস বা ফেসবুক অ্যাপ্লিকেশনগুলির মধ্যে) জিপিএস-অবস্থানকে উপহাস করে এবং এটি শারীরিক পাশাপাশি ভার্চুয়াল ডিভাইসেও কাজ করে:

ওয়েবসাইট: http://ubicom.snet.tu-berlin.de/catles/index.html

ভিডিও: https://www.youtube.com/watch?v=0WSwH5gK7yg


0

ম্যানিফেস্ট ফাইলটিতে এই অনুমতিটি ব্যবহার করুন

<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); 

0

উপরের সমাধানগুলি আমার পক্ষে কার্যকর হয়নি কারণ আমি সর্বশেষে গুগল প্লে পরিষেবাদি সংস্করণ সহ একটি অ্যান্ড্রয়েড ডিভাইসে পরীক্ষা করছি যা ফিউজডলোকেশনপ্রোভাইডার ক্লায়েন্ট ব্যবহার করে । অ্যাপ্লিকেশন ম্যানিফেস্টে মক অবস্থানের অনুমতি এবং অ্যাপ্লিকেশনটিকে বিকাশকারী সেটিংসে পূর্ববর্তী উত্তর হিসাবে উল্লিখিত মক লোকেশন অ্যাপ হিসাবে সেট করা (পূর্ববর্তী উত্তরে উল্লিখিত), পরে আমি নীচের কোটলিন কোডটি যুক্ত করেছি যা সফলভাবে লোকটিকে উপহাস করেছে।

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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.