想在android中以编程方式更改gps或位置服务设置吗?

时间:2014-09-11 06:20:54

标签: android gps

我想在android中以编程方式打开和关闭gps。

我尝试使用

boolean provider = Settings.Secure.putInt(this.getContentResolver(),Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 1);

但是当我使用此权限时它需要权限"WRITE_SECURE_SETTINGS",它会给我一个错误,即只有系统应用才能使用此权限来编写系统设置。

请告诉我如何以编程方式更改设置。

我可以以编程方式更改我的位置服务吗?

3 个答案:

答案 0 :(得分:0)

请使用此课程:

public class GpsConnectionManager {

       @SuppressWarnings("deprecation")
       public 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);

               }
       }


       public 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(this.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.sendBroadcast(poke);
               // }
       }
}

并使用这些权限:

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

从kitkat它不会工作

答案 1 :(得分:0)

在Android 4.4版之前。你无法以编程方式打开或关闭gps。您的遗嘱将从Kitkat版本java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.location.GPS_ENABLED_CHANGE

开始触发此例外

您无法以编程方式访问GPS。

答案 2 :(得分:0)

你根本不能,从Android 1.5开始。但您可以将用户重定向到位置设置:

Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);