2

下面的代码在 android 版本 2.xx 中运行良好它成功地打开了设备中的 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");
        }
4

2 回答 2

1

第三方应用程序不应更改受保护的系统设置。我想这是一个为 android 4.0 修复的错误 - 可能是这个:

http://code.google.com/p/android/issues/detail?id=7890

于 2012-04-05T09:52:03.117 回答
0

从代码:

 <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 和组件名称,所以它不起作用。

于 2012-04-05T09:56:59.603 回答