• android获取超级权限


    1. 创建一个广播,这个获取权限是一个广播操作

            <receiver android:name=".activity.DeviceAdminSample"
                android:label="@string/sample_device_admin"
                android:description="@string/sample_device_admin_description"
                android:permission="android.permission.BIND_DEVICE_ADMIN">
                <meta-data android:name="android.app.device_admin"
                    android:resource="@xml/device_admin_sample" />  //这个xml文件是规定了这个超级权限包含哪些内容,这里需要再创建的一个xml文件夹下面去定义
                <intent-filter>  
                    <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
                </intent-filter>
            </receiver>

    然后是定义那个 @xml/device_admin_sample文件

    <device-admin xmlns:android="http://schemas.android.com/apk/res/android">
        <uses-policies>
            <limit-password />
            <watch-login />
            <reset-password />
            <force-lock />
            <wipe-data />
            <expire-password />
            <encrypted-storage />
            <disable-camera />
        </uses-policies>
    </device-admin>

    前面的文件定义好了,下面这个DeviceAdminSample是继承自一个系统定义的一个广播类 DeviceAdminReceiver,通过这个广播来获取超级权限

    public class DeviceAdminSample extends DeviceAdminReceiver{
    
        void showToast(Context context, String msg) {
            String status = context.getString(R.string.admin_receiver_status, msg);
            Toast.makeText(context, status, Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onEnabled(Context context, Intent intent) {
            showToast(context, context.getString(R.string.admin_receiver_status_enabled));
        }
    
        @Override
        public CharSequence onDisableRequested(Context context, Intent intent) {
            return context.getString(R.string.admin_receiver_status_disable_warning);
        }
    
        @Override
        public void onDisabled(Context context, Intent intent) {
            showToast(context, context.getString(R.string.admin_receiver_status_disabled));
        }
    
        @Override
        public void onPasswordChanged(Context context, Intent intent) {
            showToast(context, context.getString(R.string.admin_receiver_status_pw_changed));
        }
    }

    获取权限的代码,通过打开一个 Intent 对象,这个对象通过系统的 DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN 意图,打开获取系统权限那个界面让用户确定是否授予这些权限

        public void activeSuperuser(View view) { 
         ComponentName mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class);  // 那个DeviceAdminSample就是前面我们定义的广播类
            Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);  // mDeviceAdminSample是
            intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,  R.string.add_admin_extra_app_text);
            startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN);  // 开启授予权限的那个activity
        }

    接下来就是在获取权限之后通过 DevicePolicyManager来具体操作那些需要权限的操作了

            DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);  // 获取系统服务
         if(dpm.isAdminActive(mDeviceAdminSample)){  // 判断是否已经获取了超级权限
          dpm.lockNow();  // 锁屏
        }
  • 相关阅读:
    python_Opencv_使用Matplotlib模块
    django中同源策略和跨域解决方案
    ES6常用语法
    django之页面缓存
    django组件之ContentType
    我的博客园设置
    rest_framework 之版本控制
    rest_framework 之分页器
    在django项目中手动模拟实现settings的配置
    rest_framework之url控制器详解
  • 原文地址:https://www.cnblogs.com/xxss0903/p/5856961.html
Copyright © 2020-2023  润新知