মক অবস্থানের জন্য অক্ষম / চেক করুন (জিপিএস স্পোফিং প্রতিরোধ করুন)


90

অ্যান্ড্রয়েডে জিপিএস স্পফিং রোধ / সনাক্ত করার সর্বোত্তম উপায় সন্ধান করার জন্য। এটি কীভাবে সম্পন্ন হয় তার কোনও পরামর্শ, এবং এটি বন্ধ করার জন্য কী করা যেতে পারে? আমি অনুমান করছি যে ব্যবহারকারীকে জিপিএস স্পফ করার জন্য মক লোকেশনগুলি চালু করতে হবে, যদি এটি করা হয় তবে তারা কি জিপিএস স্পফ করতে পারে?

আমার ধারণা মক অবস্থানগুলি সক্ষম করা আছে কিনা আমাকে কেবল সনাক্ত করতে হবে? অন্য কোন পরামর্শ?


4
আমি মনে করি তিনি গ্রহণের ডিডিএমএস ভিউতে পাওয়া লোকেশন স্পুফিং ফাংশনটি সম্পর্কে জিজ্ঞাসা করছেন।
শান ওয়ালটন

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

উত্তর:


125

আমি এখানে কিছু তদন্ত করেছি এবং আমার ফলাফলগুলি এখানে ভাগ করে নিয়েছি, এটি অন্যের পক্ষে কার্যকর হতে পারে।

প্রথমে আমরা মকসেটিং বিকল্পটি চালু আছে কিনা তা পরীক্ষা করতে পারি

public static boolean isMockSettingsON(Context context) {
    // returns true if mock location enabled, false if not enabled.
    if (Settings.Secure.getString(context.getContentResolver(),
                                Settings.Secure.ALLOW_MOCK_LOCATION).equals("0"))
        return false;
    else
        return true;
}

দ্বিতীয়ত, আমরা ডিভাইসে অন্য অ্যাপ্লিকেশন রয়েছে কিনা তা যাচাই করতে পারি, যা ব্যবহার করছে android.permission.ACCESS_MOCK_LOCATION(অবস্থান স্পুফিং অ্যাপস)

public static boolean areThereMockPermissionApps(Context context) {
    int count = 0;

    PackageManager pm = context.getPackageManager();
    List<ApplicationInfo> packages =
        pm.getInstalledApplications(PackageManager.GET_META_DATA);

    for (ApplicationInfo applicationInfo : packages) {
        try {
            PackageInfo packageInfo = pm.getPackageInfo(applicationInfo.packageName,
                                                        PackageManager.GET_PERMISSIONS);

            // Get Permissions
            String[] requestedPermissions = packageInfo.requestedPermissions;

            if (requestedPermissions != null) {
                for (int i = 0; i < requestedPermissions.length; i++) {
                    if (requestedPermissions[i]
                        .equals("android.permission.ACCESS_MOCK_LOCATION")
                        && !applicationInfo.packageName.equals(context.getPackageName())) {
                        count++;
                    }
                }
            }
        } catch (NameNotFoundException e) {
            Log.e("Got exception " , e.getMessage());
        }
    }

    if (count > 0)
        return true;
    return false;
}

উপরোক্ত দুটি পদ্ধতি যদি প্রথম এবং দ্বিতীয়টি সত্য হয় তবে খুব ভাল সম্ভাবনা রয়েছে যে অবস্থানটি ছদ্মবেশী বা নকল হতে পারে।

এখন, অবস্থান পরিচালকের এপিআই ব্যবহার করে স্পোফিং এড়ানো যায়।

উভয় সরবরাহকারী (নেটওয়ার্ক এবং জিপিএস) থেকে অবস্থান আপডেটের অনুরোধ করার আগে আমরা পরীক্ষার সরবরাহকারীকে সরাতে পারি

LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);

try {
    Log.d(TAG ,"Removing Test providers")
    lm.removeTestProvider(LocationManager.GPS_PROVIDER);
} catch (IllegalArgumentException error) {
    Log.d(TAG,"Got exception in removing test  provider");
}

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);

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


খুব আকর্ষণীয় পর্যবেক্ষণ। এটি ভাগ করে নেওয়ার জন্য বিশেষত শেষের একটি +1।
আর-জি

4
অপসারণের টেস্টপ্রোভাইডার পদ্ধতি সম্পর্কে নোট। আপনি লোকেশন ম্যানেজারটিকে পটভূমিতে কাজ করার অনুমতি দিলে ব্যবহারকারী মক অ্যাপে যেতে পারে এবং উপহাসের অবস্থানটি পুনরায় চালু করতে পারে। আপনার অবস্থান পরিচালক আপনি পুনরায় অপসারণ টেস্টপ্রাইডার কল না করা পর্যন্ত আপনার অবস্থান পরিচালক মক অবস্থানগুলি গ্রহণ করতে শুরু করবেন।
তৈমুর_সি

4
এছাড়াও আপনার অ্যাপ্লিকেশনটিতে কাজ করার android.permission.ACCESS_MOCK_LOCATIONঅনুমতি থাকতে হবে removeTestProvider, যা আমি মনে করি সবচেয়ে বড় অসুবিধা।
তৈমুর_সি

18
উত্তর করার জন্য ধন্যবাদ! মাত্র একটি বিন্দু: অ্যান্ড্রয়েড 6.0 এ ALLOW_MOCK_LOCATION হ্রাস করা হয়েছে। এবং প্রকৃতপক্ষে মক লোকেশনের জন্য কোনও চেকবক্স নেই। অবস্থানের বস্তু থেকে অবস্থানটি নকল কিনা তা সঠিকভাবে পরীক্ষা করতে পারেন: অবস্থান.
isFromMockProvider

4
@ ব্ল্যাককারা আমি এটি সর্বোপরি ব্যবহার করি নি। আমি একটি কাস্টমাইজড সমন্বয় ব্যবহার isMockSettingsON(), Location.isFromMockProvider()এবং areThereMockPermissionApps()একটি অ্যাপ্লিকেশনের কালো তালিকা সঙ্গে। ACCESS_MOCK_LOCATION অনুমতি সহ অনেকগুলি পূর্বনির্ধারিত সিস্টেম অ্যাপ রয়েছে , উদাহরণস্বরূপ এইচটিসি এবং স্যামসাং ডিভাইসে। সমস্ত বৈধ অ্যাপ্লিকেশনগুলির একটি শ্বেত তালিকাটি আরও ভাল হবে তবে সর্বাধিক জনপ্রিয় অবস্থানের স্পোফিং অ্যাপ্লিকেশনগুলির একটি কালো তালিকা আমার ক্ষেত্রে ভাল কাজ করেছে। এবং আমি ডিভাইসটি রুট ছিল কিনা তাও পরীক্ষা করেছিলাম।
তৈমুর_সি

45

18 এআইপিএর পর থেকে, অবজেক্টের অবস্থানের পদ্ধতিটি রয়েছে .আইসফর্মমোকপ্রাইডার () থেকে যাতে আপনি জাল অবস্থানগুলি ফিল্টার করতে পারেন।

আপনি যদি 18 বছরের পূর্বে সংস্করণগুলি সমর্থন করতে চান তবে এই জাতীয় কিছু ব্যবহার করা সম্ভব:

boolean isMock = false;
if (android.os.Build.VERSION.SDK_INT >= 18) {
    isMock = location.isFromMockProvider();
} else {
    isMock = !Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0");
}

আমি মোটামুটি নিশ্চিত যে আপনার দ্বিতীয় প্রকাশটি পিছনের দিকে রয়েছে (সত্য ফিরে আসার সাথে সাথে এটি মিথ্যা ফিরানো উচিত)। আমি মনে করি এটি হওয়া উচিত:isMock = !Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0");
অজাহানচর্লস

4
আপনাকে স্বাগতম. আরও আধুনিক উত্তর পোস্ট করার জন্য ধন্যবাদ! সত্যই এটি আজকের সঠিক উত্তর।
অজাহানচার্লস

4
18 বছরের উপরে SDK এর জন্য "অবস্থান" অবজেক্ট ছাড়াই আমরা কীভাবে এটি করতে পারি?
অজিত শর্মা

35

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

এটি করার জন্য, আমি নিম্নলিখিতগুলি করেছি:

// returns true if mock location enabled, false if not enabled.
if (Settings.Secure.getString(getContentResolver(),
       Settings.Secure.ALLOW_MOCK_LOCATION).equals("0")) 
       return false; 
       else return true;

4
এটি যদিও বোকা প্রমাণ নয়। রুটবিহীন ডিভাইসের ব্যবহারকারীরা এখনও ভবিষ্যতে w / সময় নির্ধারণ করতে পারে, তারপরে মক অবস্থানগুলি অক্ষম করতে পারে এবং মকের অবস্থানটি এখনও সক্রিয় রয়েছে। আরও খারাপ, তারা মক অবস্থানটিকে নেটওয়ার্ক / জিপিএস হিসাবে একই সরবরাহকারীর নাম বলতে পারে এবং এটি দৃশ্যত তা থেকে টানতে পারে ..
ক্রিসপিক্স

4
তদ্ব্যতীত, নকল জিপিএসের মূলযুক্ত ডিভাইসগুলিতে মক অবস্থান সেটিংসের প্রয়োজন হয় না।
পল ল্যামার্টসমা

ভুয়া.gps অ্যাপ্লিকেশন ইনস্টল করা নেই কিনা তা যাচাই করতে সর্বদা পরীক্ষা করতে পারে :)
ক্রিসপিক্স

11
আপনি return !xপরিবর্তে ব্যবহার করতে পারেন if(x) return false; else return true
কোডসইনচাউস

প্রকৃতপক্ষে, জাল অবস্থান এমনকি মূলে থাকা ডিভাইসগুলিতেও মক অবস্থানের সেটিংস পরিবর্তন করবে।
পেজনাটফাউন্ড

25

কয়েক বছর পরে এই থ্রেডে হোঁচট খেয়েছে। ২০১ 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);
        ...
        // You can specify a different accuracy and interval here.
        // The last parameter (allowMockLocations) must be 'false' to suppress mock locations.  
        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) {
        // No mock locations arriving here
    }

    ...
}

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

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


লিঙ্কযুক্ত ব্লগ পোস্টটি সংক্ষেপে আপনার সংক্ষিপ্ত করা উচিত (যেখানে এটি ফ্রমমকপ্রাইডার ব্যর্থ হয়)।
অজাহানচার্লস

@ কোডকনফিডেন্ট - মন্তব্যের জন্য ধন্যবাদ! যদিও আমার যুক্ত করা উচিত তা নিশ্চিত নয়। আমার উত্তরের দ্বিতীয় অনুচ্ছেদটি হ'ল ব্লগ পোস্টের সংক্ষিপ্তসার। .isFromMockProvider বিক্ষিপ্তভাবে এবং অপ্রত্যাশিতভাবে ব্যর্থ হয়। নিবন্ধে আমি এটির সন্ধান এবং প্রতিকারের জন্য আমি কী পদক্ষেপ নিয়েছি তার আরও বিশদে বর্ণনা করছি।
ক্লাসনটফাউন্ড

ঠিক আছে, আমি বুঝতে বাধ্য হয়েছিলাম আপনার নিবন্ধে ঝাঁপিয়ে পড়তে বাধ্য হয়ে আমার কাছে যা মনে হচ্ছে এটি এসও এর উদ্দেশ্যটির বিরুদ্ধে চলে। আমার সেরা পরামর্শটি হ'ল: (১) আপনার ছবিটি সন্নিবেশ করান যা ছদ্মবেশী অবস্থানটি দেখায় (উপহাস হিসাবে চিহ্নিত করা হয় না) এবং (২) এগুলি নির্মূল করার জন্য আপনার যুক্তিটি দ্রুত দ্রষ্টব্য (একটি উপহাসের 1 কিলোমিটারের মধ্যে উপেক্ষা করুন)
এজাহারচর্লস

ঠিক আছে, আছে। আমি মনে করি ওপি প্রসঙ্গে, .isFromMockProvider () কেন বিশ্বাসযোগ্য নয় তার সুনির্দিষ্ট বিবরণ খুব প্রাসঙ্গিক নয়। তবে বড় চিত্রটির জন্য আপনি উল্লিখিত বিবরণ যুক্ত করার চেষ্টা করব। সাহায্য করার জন্য ধন্যবাদ!
ক্লাসনটফাউন্ড

4
ব্যবহারকারী যদি গুগল প্লে পরিষেবা ইনস্টল না করে থাকে?
ইউরি চের্নিশভ 17

6

আপনি যদি সেল টাওয়ারগুলির সাধারণ অবস্থানটি জানতে পেরেছিলেন, আপনি বর্তমান সেল টাওয়ারটি প্রদত্ত অবস্থানটির সাথে মেলে কিনা তা পরীক্ষা করে দেখতে পারেন (10 বা ততোধিক মাইলের মতো বড় কোনও কিছুর ত্রুটির ব্যবধানের মধ্যে)।

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

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

অবশ্যই, এটির জন্য কোনও সেল সিগন্যাল থাকা প্রয়োজন। এবং আপনাকে অঞ্চলটির সমস্ত সেল টাওয়ার আইডিগুলি জানতে হবে - সমস্ত নেটওয়ার্ক সরবরাহকারী - বা আপনি কোনও মিথ্যা নেতিবাচক ঝুঁকিটি চালাবেন।


4
ধন্যবাদ, এটি একটি দুর্দান্ত ধারণা। আমি এটি সন্ধান করতে পারে। ধন্যবাদ
ক্রিসপিক্স

3

এই কোডটি এটি খুব সহজ এবং দরকারী ব্যবহার করে দেখুন

  public boolean isMockLocationEnabled() {
        boolean isMockLocation = false;
        try {
            //if marshmallow
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                AppOpsManager opsManager = (AppOpsManager) getApplicationContext().getSystemService(Context.APP_OPS_SERVICE);
                isMockLocation = (opsManager.checkOp(AppOpsManager.OPSTR_MOCK_LOCATION, android.os.Process.myUid(), BuildConfig.APPLICATION_ID)== AppOpsManager.MODE_ALLOWED);
            } else {
                // in marshmallow this will always return true
                isMockLocation = !android.provider.Settings.Secure.getString(getApplicationContext().getContentResolver(), "mock_location").equals("0");
            }
        } catch (Exception e) {
            return isMockLocation;
        }
        return isMockLocation;
    }

এটি উপরের isMockLocationEnabled পদ্ধতির আরও উন্নত সংস্করণ।
সেটজমোড়া

AppOpsManager.checkOp () সিকিউরিটি এক্সসেপশন নিক্ষেপ করে যদি অ্যাপটি এই ওপটিতে ক্র্যাশ করতে কনফিগার করা থাকে। পছন্দ: java.lang.SecurityException: uid 11151 এর প্যাকেজ নামটি এমওকে_লোকশন সম্পাদন করার অনুমতি নেই। এই পদ্ধতিটি "যদি আপনার অ্যাপ্লিকেশন লোকেরা উপহাস করতে পারে" সনাক্ত করতে চলেছে। তবে "যদি প্রাপ্ত স্থানগুলি উপহাস করা হয় না"।
সার্জিও

@ যদি আপনার অ্যাপ্লিকেশন লোকেশনগুলি উপহাস করতে পারে "দ্বারা সার্জিও আপনার অর্থ বর্তমান অ্যাপ্লিকেশনগুলিতে লোকেশনগুলি উপহাস করার অনুমতি আছে, তাই না?
ভিক্টর লেয়ার্টে

@ ভিক্টরলয়ার্টে আমি শেষ হয়েছে একটি বিষয়ের প্রসঙ্গে: / ঠিক আছে। তবে প্রশ্নটি ছিল: "কোনও প্রাপ্ত স্থানের উপহাস করা হয়েছে বা একটি উপহাস সরবরাহকারীর কাছ থেকে কীভাবে তা সনাক্ত করতে হবে"। অথবা কীভাবে জাল অবস্থানগুলি উপেক্ষা করবেন।
সার্জিও

2

এই স্ক্রিপ্টটি অ্যান্ড্রয়েডের সমস্ত সংস্করণের জন্য কাজ করছে এবং আমি এটি অনেক সন্ধানের পরে খুঁজে পাই

LocationManager locMan;
    String[] mockProviders = {LocationManager.GPS_PROVIDER, LocationManager.NETWORK_PROVIDER};

    try {
        locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        for (String p : mockProviders) {
            if (p.contentEquals(LocationManager.GPS_PROVIDER))
                locMan.addTestProvider(p, false, false, false, false, true, true, true, 1,
                        android.hardware.SensorManager.SENSOR_STATUS_ACCURACY_HIGH);
            else
                locMan.addTestProvider(p, false, false, false, false, true, true, true, 1,
                        android.hardware.SensorManager.SENSOR_STATUS_ACCURACY_LOW);

            locMan.setTestProviderEnabled(p, true);
            locMan.setTestProviderStatus(p, android.location.LocationProvider.AVAILABLE, Bundle.EMPTY,
                    java.lang.System.currentTimeMillis());
        }
    } catch (Exception ignored) {
        // here you should show dialog which is mean the mock location is not enable
    }

1

গুগল ম্যাপ জিওলোকেশন এপিআই ব্যবহার করে আপনি সেল টাওয়ার ট্রায়াঙ্গুলেশন বা ওয়াইফাই অ্যাক্সেস পয়েন্ট তথ্যের ভিত্তিতে অতিরিক্ত চেক যোগ করতে পারেন

সেলটিয়ার্স সম্পর্কে তথ্য পাওয়ার সহজ উপায়

final TelephonyManager telephonyManager = (TelephonyManager) appContext.getSystemService(Context.TELEPHONY_SERVICE);
String networkOperator = telephonyManager.getNetworkOperator();
int mcc = Integer.parseInt(networkOperator.substring(0, 3));
int mnc = Integer.parseInt(networkOperator.substring(3));
String operatorName = telephonyManager.getNetworkOperatorName();
final GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager.getCellLocation();
int cid = cellLocation.getCid();
int lac = cellLocation.getLac();

আপনি আপনার ফলাফল সাইটের সাথে তুলনা করতে পারেন

ওয়াইফাই অ্যাক্সেস পয়েন্ট সম্পর্কিত তথ্য পেতে

final WifiManager mWifiManager = (WifiManager) appContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE);

if (mWifiManager != null && mWifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {

    // register WiFi scan results receiver
    IntentFilter filter = new IntentFilter();
    filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);

    BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                List<ScanResult> results = mWifiManager.getScanResults();//<-result list
            }
        };

        appContext.registerReceiver(broadcastReceiver, filter);

        // start WiFi Scan
        mWifiManager.startScan();
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.