下面的代码在android 2.x.x版本中运行良好。它成功地在设备中打开了gps。但问题是它不适用于android 4.x以后的版本。
我希望在4.x以后的版本中以程序方式打开gps。有什么帮助或解决方案吗
String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
Utility.print("provider string " + provider);
if (!provider.contains("gps")) { // if gps is disabled
Utility.print("gps is disabled now 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"));
sendBroadcast(poke);
Utility.print("gps is disabled now enabled 1");
} else {
Utility.print("gps is already enabled");
}
第三方应用程序不应更改受保护的系统设置。我想这是一个为android 4.0修复的错误——可能是这个:
http://code.google.com/p/android/issues/detail?id=7890
来自代码:
<receiver android:name=".widget.SettingsAppWidgetProvider" android:label="@string/gadget_title">
并且在android 4.0之上变成这样:
<receiver android:name=".widget.SettingsAppWidgetProvider"
android:label="@string/gadget_title"
android:exported="false"
android:enabled="@bool/has_powercontrol_widget">
添加了android:exported="false"
其他组件是否可以使用内容提供商应用程序——如果可以,则为"true",如果不能,则为为"false"。如果为"false",该提供程序仅对同一应用程序的组件可用或具有相同用户ID的应用程序。默认值为"true"。
所以,你的应用程序没有设置应用程序的uid和组件名称,所以它不起作用。