Как я могу включить и отключить GPS программно - PullRequest
2 голосов
/ 26 мая 2011

Я разрабатываю приложение, в котором я хочу включить GPS, когда я начинаю свою деятельность, и я хочу отключить GPS, когда я выхожу из своего приложения. Могу ли я сделать это через мою программу ..

Любая помощь будет оценена.

Ответы [ 8 ]

6 голосов
/ 26 мая 2011

Вы можете запустить GPS с помощью

LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    LocationListener locationListener = new CTLocationListener();
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1.0f, locationListener);

Чтобы остановить провайдера GPS, используйте

locationManager.removeUpdates(locationListener);
6 голосов
/ 26 мая 2011

Вот код ...

 private void turnGPSOn(){   

    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);  
   }  }    
2 голосов
/ 21 марта 2013

Я исследовал эту тему на всех веб-сайтах. и я нашел этот код, как показано ниже. Я попробовал его работать.

Метод-1

Enable GPS
Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
intent.putExtra("enabled", true);
sendBroadcast(intent);
Disable GPS
Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
intent.putExtra("enabled", false);
sendBroadcast(intent);

Метод-2

 // If GPS is OFF
    private void turnGPSOn(){
        String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        if(!provider.contains("gps")){
            final Intent intent = new Intent();
            intent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
            intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
            intent.setData(Uri.parse("3"));
            sendBroadcast(intent);
        }
    }
    // If GPS is ON
    private void turnGPSOff(){
        String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        if(provider.contains("gps")){
            final Intent intent = new Intent();
            intent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
            intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
            intent.setData(Uri.parse("3"));
            sendBroadcast(intent);
        }
    }

Для получения дополнительной информации вы можете посетить этот веб-сайт: http://androidmaterial.blogspot.com/2012/04/how-to-enabledisable-gps-in-android.html

0 голосов
/ 06 апреля 2015

GpsSettings

public class GpsSettings
{
    @SuppressWarnings("deprecation")
    public static void turnGPSOn(Context context)
    {

        Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");

        intent.putExtra("enabled", true);

        context.sendBroadcast(intent);  

        String provider = Settings.Secure.getString(context.getContentResolver(),
                Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        Settings.Secure.setLocationProviderEnabled(context.getContentResolver(), "gps", true);

        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"));
            context.sendBroadcast(poke);
        }
    }

    @SuppressWarnings("deprecation")
    public static void turnGPSOff(Context context)
    {

        Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");

        intent.putExtra("enabled", false);

        context.sendBroadcast(intent);  
        String provider = Settings.Secure.getString(context.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"));
            context.sendBroadcast(poke);
        }
    }
}
0 голосов
/ 03 ноября 2014

Я знаю, что уже слишком поздно, но прямой запуск службы определения местоположения не будет работать. Вместо этого используйте приведенный ниже код для запуска службы определения местоположения.

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
0 голосов
/ 07 октября 2013

Если я не ошибаюсь, вы не можете сделать это полностью программно.Лучше всего запустить намерение запустить страницу настроек, но впоследствии пользователь должен включить настройку gps на странице настроек.

Вы не можете сделать это в фоновом режиме без вмешательства пользователя.

0 голосов
/ 17 декабря 2012

Чтобы отключить GPS через ваш код,

    Intent my_intent = new Intent();
    my_intent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
    my_intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
    my_intent.setData(Uri.parse("3")); 
     sendBroadcast(my_intent);  //use context.sendBroadcast(my_intent) if you are in any Broadcast activity
0 голосов
/ 09 сентября 2012

Вот все, что я могу найти (мой код не выполняется в действии, поэтому у меня есть класс ApplicationContext, который я вызываю статическим методом getInstance. Вам не нужно делать это в действии. Извините за форматирование кода):

public static boolean isGPSEnabled(){
        LocationManager locationManager = (LocationManager)ApplicationContext.getInstance().getSystemService(Context.LOCATION_SERVICE);
        boolean enabled = locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER );
        if(enabled) return enabled;
        String provider = Settings.Secure.getString(ApplicationContext.getInstance().getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        return provider.contains("gps");
    }

private static boolean canToggleGPSDirectly() {
        PackageManager pacman = ApplicationContext.getInstance().getPackageManager();
        PackageInfo pacInfo = null;

        try {
            pacInfo = pacman.getPackageInfo("com.android.settings", PackageManager.GET_RECEIVERS);
        } catch (NameNotFoundException e) {
            return false; //package not found
        }

        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
    }

//this only works in older versions of android (it woks on 2.2)
private static void toggleGPS(){
        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")); 
        ApplicationContext.getInstance().sendBroadcast(poke);
    }

private static void showGPSSettingsScreen(){
        //show the settings screen
        Intent myIntent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS);
        myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        ApplicationContext.getInstance().startActivity(myIntent);

        // this doens't work if your app isn't signed as firmware....Settings.Secure.setLocationProviderEnabled(ApplicationContext.getInstance().getContentResolver(), LocationManager.GPS_PROVIDER, true);
    }

public static void ensureGPSStatus(boolean on){
        boolean isGPSEnabled = isGPSEnabled();
        if((isGPSEnabled && !on) || (!isGPSEnabled && on)){
            if(canToggleGPSDirectly()){
                toggleGPS();
            }else{
                showGPSSettingsScreen();
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...