Android,当应用程序已启用设备管理员时更改GPS状态 [英] Android, Change GPS status when app is device administrator enabled
问题描述
当用户将应用设置为Device administrator
时如何设置GPS状态.
How to set GPS status on when the app is set as Device administrator
by user.
我正在使用这种方法:
private void turnGPSOn() {
Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
intent.putExtra("enabled", true);
getApplicationContext().sendBroadcast(intent);
String provider = Settings.Secure.getString(getApplicationContext()
.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.getApplicationContext().sendBroadcast(poke);
}
}
并至少在API-21
上得到此错误:
and getting this error at least on API-21
:
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.location.GPS_ENABLED_CHANGE from pid=27737, uid=10464
请注意启用的 Device administrator
权限,不要将问题标记为重复!
推荐答案
android.location.GPS_ENABLED_CHANGE 意向只能由系统应用广播,因为它是受保护的广播(意味着您的应用应为使用systemsignature签名,或者应该是系统应用).即使您的应用被用户选择为Device Admin应用,也并不意味着它有资格使用系统功能. Device Admin应用将可以访问 DevicePolicyManager 类公开的功能.可以使用Lollipop及更高版本上的 DevicePolicyManger 类来控制某些全局设置和安全设置.
android.location.GPS_ENABLED_CHANGE intent can only be broadcasted by system apps as it is a protected broadcast(means your app should be either signed with systemsignature or it should be a system app). Even if your app is selected as Device Admin app by user, it does not mean it is eligible to use system features. Device Admin app will get access to features that are exposed by DevicePolicyManager class. Some of the global settings and secure settings can be controlled using DevicePolicyManger class on Lollipop and above.