我想在android中以编程方式打开和关闭gps。
我尝试使用
boolean provider = Settings.Secure.putInt(this.getContentResolver(),Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 1);
但是当我使用此权限时它需要权限"WRITE_SECURE_SETTINGS"
,它会给我一个错误,即只有系统应用才能使用此权限来编写系统设置。
请告诉我如何以编程方式更改设置。
我可以以编程方式更改我的位置服务吗?
答案 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);