以编程方式在Android版本4.x及更高版本中打开/关闭GPS



下面的代码在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和组件名称,所以它不起作用。

最新更新