কয়েক বছর পরে এই থ্রেডে হোঁচট খেয়েছে। ২০১ In সালে, বেশিরভাগ অ্যান্ড্রয়েড ডিভাইসগুলির এপিআই স্তর> = 18 থাকবে এবং তার ফলে ফার্নান্দোর নির্দেশিত অবস্থান অনুযায়ী অবস্থান . isFromMockProvider () এর উপর নির্ভর করা উচিত ।
আমি বিভিন্ন অ্যান্ড্রয়েড ডিভাইস এবং ডিস্ট্রোজে নকল / উপহাসের অবস্থানগুলির সাথে ব্যাপকভাবে পরীক্ষা-নিরীক্ষা করেছি। দুর্ভাগ্যক্রমে .isFromMockProvider () 100% নির্ভরযোগ্য নয়। প্রতি একবারে একবারে, একটি নকল অবস্থানকে মোক হিসাবে লেবেল করা হবে না । এটি গুগল অবস্থান এপিআই-তে কিছু ভ্রান্ত অভ্যন্তরীণ ফিউশন যুক্তির কারণে বলে মনে হচ্ছে।
আমি আরও বিস্তারিত জানতে চাইলে এ সম্পর্কে একটি বিস্তারিত ব্লগ পোস্ট লিখেছিলাম । সংক্ষিপ্তসার হিসাবে, আপনি যদি লোকেশন এপিআই থেকে অবস্থান আপডেটগুলি সাবস্ক্রাইব করেন, তবে কোনও নকল জিপিএস অ্যাপ্লিকেশনটি স্যুইচ করুন এবং প্রতিটি অবস্থানের ফলাফল.সট্রিংয়ের ফলাফলটি কনসোলে মুদ্রণ করুন , আপনি এরকম কিছু দেখতে পাবেন:
লক্ষ্য করুন কীভাবে, অবস্থানের আপডেটের স্রোতে, একটি অবস্থানের অন্যদের মতো একই স্থানাঙ্ক রয়েছে, তবে এটি একটি উপহাস হিসাবে পতাকাঙ্কিত করা হয়নি এবং এর চেয়ে দরিদ্র অবস্থানের সঠিকতা রয়েছে has
এই সমস্যার প্রতিকারের জন্য, আমি একটি ইউটিলিটি ক্লাস লিখেছি যা নির্ভরযোগ্যভাবে সমস্ত আধুনিক অ্যান্ড্রয়েড সংস্করণ (এপিআই স্তর 15 এবং উচ্চতর) জুড়ে মোক অবস্থানগুলি দমন করবে :
অবস্থানঅ্যাসিস্টেন্ট - অ্যান্ড্রয়েডে ঝামেলা-মুক্ত অবস্থান আপডেট
মূলত, এটি নন-মক অবস্থানগুলি "বিভ্রান্ত" করে যা সর্বশেষ জ্ঞাত মক অবস্থানের 1 কিলোমিটারের মধ্যে থাকে এবং সেগুলি মক হিসাবে লেবেল করে। এটি উল্লেখযোগ্য সংখ্যক নন-মক অবস্থান উপস্থিত না হওয়া পর্যন্ত এটি করে। LocationAssistant না শুধুমাত্র মক অবস্থানগুলি প্রত্যাখ্যান করতে পারেন, কিন্তু স্থাপনের এবং অবস্থান আপডেটের জন্য সাবস্ক্রাইব করার অসুবিধা অধিকাংশ থেকে unburdens।
শুধুমাত্র আসল অবস্থানের আপডেটগুলি পেতে (যেমন মোককে দমন), এটি নীচে ব্যবহার করুন:
public class MyActivity extends Activity implements LocationAssistant.Listener {
private LocationAssistant assistant;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
assistant = new LocationAssistant(this, this, LocationAssistant.Accuracy.HIGH, 5000, false);
}
@Override
protected void onResume() {
super.onResume();
assistant.start();
}
@Override
protected void onPause() {
assistant.stop();
super.onPause();
}
@Override
public void onNewLocationAvailable(Location location) {
}
...
}
onNewLocationAvailable()
এখন কেবল আসল অবস্থানের তথ্যের সাথেই ডাকা হবে। আপনার প্রয়োগ করার জন্য আরও কিছু শ্রোতার পদ্ধতি রয়েছে তবে আপনার প্রশ্নের প্রসঙ্গে (কীভাবে জিপিএসের স্পোফিং রোধ করতে হবে) এটি মূলত এটি।
অবশ্যই, একটি শিকড় ওএসের সাহায্যে আপনি লোকাল স্পোফিংয়ের উপায়গুলি খুঁজে পেতে পারেন যা সাধারণ অ্যাপ্লিকেশনগুলির পক্ষে সনাক্ত করা অসম্ভব।