Android 4.1.2如何以编程方式关闭GPS

时间:2013-11-18 13:28:04

标签: android gps adt

我正试图通过代码打开GPS。以下是我用过的代码。

String provider = Settings.Secure.getString(context.getContentResolver(),Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if(provider.contains("gps")){ //if gps is enabled
    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);

在OnReceive函数中执行的代码。我做错了什么?

5 个答案:

答案 0 :(得分:15)

Android指南已更改为4.0以上版本。对于4.0以上的版本,您无法以编程方式更改GPS。但是,您可以通过编程方式更改wifi

答案 1 :(得分:8)

  

如何以编程方式关闭GPS

GPS收音机将在以下时间开启:

  • 已启用
  • 一个或多个应用尝试通过GPS获取用户的位置

欢迎您的应用不再尝试获取用户的位置。但是,GPS是否开启是在您无法控制的范围内。

  

我尝试使用此代码。但没有任何事情发生。

这很好,因为您尝试利用的安全漏洞早已得到修复。

应用程序无法以编程方式启用或禁用GPS,除非在root设备上。请允许用户这样做。

答案 2 :(得分:3)

public void turnGPSOn()
{
     Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
     intent.putExtra("enabled", true);
     this.ctx.sendBroadcast(intent);

    String provider = Settings.Secure.getString(ctx.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")); 
        this.ctx.sendBroadcast(poke);


    }
}

<强>方法一:

 // automatic turn off the gps
    public void turnGPSOff()
    {
        String provider = Settings.Secure.getString(ctx.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        if(provider.contains("gps")){ //if gps is enabled
            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")); 
            this.ctx.sendBroadcast(poke);
        }
    }

如果上述方法不起作用,请尝试此操作

方法2:

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

答案 3 :(得分:2)

在4.0及以上版本打开GPS的代码:

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

@SuppressWarnings("deprecation")
public static void turnGPSOff(Context context)
{
    String provider = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if (provider.contains("gps"))
    { //if gps is enabled
        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);
    }
}

答案 4 :(得分:1)

您无法从4.0及更高版本以编程方式更改GPS以上。由于某些隐私原因,Android指南已发生变化。