【问题标题】:Permission Denied Exception while Turning ON GPS Programmatically以编程方式打开 GPS 时出现权限被拒绝异常
【发布时间】:2013-01-25 06:55:23
【问题描述】:

我需要以编程方式启用 GPS,以便我使用以下代码启用 GPS:

            String provider = Settings.Secure.getString(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"));
            sendBroadcast(poke);

但是当我使用这段代码时,我得到了以下异常:

    01-25 12:11:37.218: W/ActivityManager(477): Permission denied: checkComponentPermission() reqUid=1000
    01-25 12:11:37.218: W/ActivityManager(477): Permission Denial: broadcasting Intent { cat=[android.intent.category.ALTERNATIVE] dat=3 cmp=com.android.settings/.widget.SettingsAppWidgetProvider } from com.gpstraking (pid=982, uid=10186) requires null due to receiver com.android.settings/com.android.settings.widget.SettingsAppWidgetProvider

我必须授予什么权限才能避免此异常并启用 GPS。

【问题讨论】:

  • 您使用的是哪个版本的设备??
  • 我在 Android 2.3 和 Android 4.0.1 上测试过
  • 是的,我使用了相同的代码,但它不起作用
  • 在 2.2 之后它被弃用以编程方式打开 GPS。要求用户打开 GPS 的唯一方法

标签: android android-permissions


【解决方案1】:

您的清单中是否有以下行:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

【讨论】:

    【解决方案2】:

    将此添加到清单中:

    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"></uses-permission>
    

    【讨论】:

    • 如果你已经这样做了。使用清单中添加的所有权限更新问题
    • 这还不够。该应用程序必须是系统应用程序。只能使用有根设备完成。
    • 权限只授予系统应用;
    猜你喜欢
    • 1970-01-01
    • 2013-01-08
    • 2013-03-13
    • 2012-02-09
    • 1970-01-01
    • 2019-06-16
    相关资源
    最近更新 更多