آموزش روشن و خاموش کردن Gps بدون نمایش Dialog در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش روشن و خاموش کردن Gps بدون نمایش Dialog در برنامه نویسی اندروید می پردازیم شاید در بعضی مواقع نیاز باشد تا ما به صورت برنامه نویسی (programmatically) یک عمل رو انجام دهیم به طور مثال اگر گوشی شما دزدیده شده باشد ما نمی تونیم Dialog روشن کردن Gps را نمایش دهیم و از دزد بخواهیم آن را روشن کند ? پس باید این کار را در background انجام دهیم تا متوجه نشود در ادامه با ما همراه باشید.
به طور معمول این کار امکان پذیر نیست چون به خاطر privacy کاربر این قابلیت توسط توسعه دهندگان اندروید بسته شده است اما همیشه یک راهی برای دور زدن هست با بررسی که انجام دادیم یک باگ در ویجت روشن و خاموش کردن gps وجود دارد که با استفاده از آن می توانیم Gps را روشن و یا خاموش کنیم.
ابتدا شما باید دسترسی مربوط به استفاده از Gps را اضافه کنید.
1 | <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> |
برای اینکه Gps را روشن کنید می تونید از کد زیر استفاده کنید.
1 2 3 4 5 6 7 8 9 10 | private void turnGPSOn(){ String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); if(!provider.contains("gps")){ //if gps is disabled final Intent poke = new Intent(); poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); poke.addCategory(Intent.CATEGORY_ALTERNATIVE); poke.setData(Uri.parse("3")); sendBroadcast(poke); } } |
و برای اینکه آن را خاموش کنید می تونید از کد زیر استفاده کنید.
1 2 3 4 5 6 7 8 9 | private void turnGPSOff(){ String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); if(provider.contains("gps")){ final Intent poke = new Intent(); poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); poke.addCategory(Intent.CATEGORY_ALTERNATIVE); poke.setData(Uri.parse("3")); sendBroadcast(poke); } |
البته این باگ در نسخه هفت اندروید بسته شد ! ولی برای اینکه بررسی کنید این باگ وجود دارد و سپس کدهای بالا را اجرا کنید می تونید مثل زیر عمل کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | private boolean canToggleGPS() { PackageManager pacman = getPackageManager(); PackageInfo pacInfo = null; try { pacInfo = pacman.getPackageInfo("com.android.settings", PackageManager.GET_RECEIVERS); } catch (NameNotFoundException e) { return false; } if(pacInfo != null){ for(ActivityInfo actInfo : pacInfo.receivers){ //test if recevier is exported. if so, we can toggle GPS. if(actInfo.name.equals("com.android.settings.widget.SettingsAppWidgetProvider") && actInfo.exported){ return true; } } } return false; //default } |
باید این void رو با یک if بررسی کنید که اگر برابر با true بود سپس void های بالا را اجرا کنید.
این آموزش هم به پایان رسید.
موفق و موید باشید.
با سلام من قبلا از این کد ها استفاده کرده بودم اما انجام نمیشه و چندجا پرسیدم گفتن اندروید 6 به بالا دیگه این کد ها کار نمیکنند آیا راهی برای اندروید 6 به بالا هم وجود دارد؟ ممنون
با سلام از کد زیر استفاده کنید به جواب خواهید رسید.
سلام کار نمیکنه برای من 🙁