Android, Change GPS status when app is device administrator enabled

微笑、不失礼 提交于 2019-12-23 05:15:19

问题


How to set GPS status on when the app is set as Device administrator by user.

I'm using this method :

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);

    }
}

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

please please please care about Device administrator permission that is enabled and don't tag the question as duplicated!


回答1:


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.

Control Secure Settings

Control Global Settings



来源:https://stackoverflow.com/questions/30950623/android-change-gps-status-when-app-is-device-administrator-enabled

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!