Android 实现一键锁屏

应用安装后屏幕上会出现两个图标,点击“一键锁屏”时,若未配置设备管理器权限,则跳转到“配置一键锁屏界面”,否则直接锁屏
效果图

1.PNG
![Uploading 3_728048.PNG . . .]
3.PNG
4.PNG

1. 新建 LockScreen.java 文件,添加“一键锁屏”代码

//一键锁屏
public class LockScreen extends AppCompatActivity { 
   
    private DevicePolicyManager devicePolicyManager;
    
    @Override    
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);       
        devicePolicyManager =(DevicePolicyManager)getSystemService(DEVICE_POLICY_SERVICE);   
       //若未注册设备管理器,跳转到配置界面        
        try{            
              devicePolicyManager.lockNow();            
              finish();        
        }
        catch (Exception e){            
              Intent intent = new Intent(this, MainActivity.class); 
              startActivity(intent);           
              finish();        
        }    
    }
}

2.在 MainActivity 中配置一键锁屏代码

2.1  放置3个按钮,btnSetAdmin, btnCancleAdmin, btnLockScreen 分别为注册设备管理器,注销设备管理器,一键锁屏。注册与注销按钮每次只能显示一个,故在 xml 文件中将注册与注销按钮放在一个 FrameLayout 中,利用 android:visibility 设置是否可见

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/btn_set_admin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/set_admin"/>
        <Button
            android:id="@+id/btn_cancle_admin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone"//初始界面注销按钮不可见
            android:text="@string/cancle_admin"/>
    </FrameLayout>

    <Button
        android:id="@+id/btn_lock_screen"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:text="@string/lock_screen"/>

2.2  将按钮可见设置封装起来便于多次使用;初始化时,显示取消设备管理器界面


    //取消设备管理器界面
    private void showCancle() {
        btnSetAdmin.setVisibility(View.INVISIBLE);
        btnCancleAdmin.setVisibility(View.VISIBLE);
        btnLockScreen.setVisibility(View.VISIBLE);
    }

    //设置设备管理器界面
    private void showSet(){
        btnSetAdmin.setVisibility(View.VISIBLE);
        btnCancleAdmin.setVisibility(View.INVISIBLE);
        btnLockScreen.setVisibility(View.INVISIBLE);
    }

        DevicePolicyManager devicePolicyManager = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);

        //若已注册设备管理器,显示取消设备管理器页面
        if(devicePolicyManager.isAdminActive(new ComponentName(this, DeviceMangerBc.class))){
            showCancle();
        }

2.3  新建 DeviceMangerBc.java 文件,设置广播接收器并且在 广播接收器配置文件中添加 <meta-data> 、<intent-filter>(这里弹出 Toast 提示)

//广播接收器
public class DeviceMangerBc extends DeviceAdminReceiver{

    @Override
    public void onEnabled(Context context, Intent intent) {
        super.onEnabled(context, intent);
        Toast.makeText(context, "已获取设备管理者权限", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        super.onDisabled(context, intent);
        Toast.makeText(context, "已取消设备管理者权限", Toast.LENGTH_SHORT).show();
    }
}

        <receiver android:name=".DeviceMangerBc">

            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/device_admin" />

            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
                <action android:name="android.app.action.DEVICE_ADMIN_DISABLED" />
            </intent-filter>

        </receiver>

2.4  按钮逻辑设置

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn_set_admin:
                Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, new ComponentName(this, DeviceMangerBc.class));
                startActivityForResult(intent, 1);
                break;
            case R.id.btn_cancle_admin:
                devicePolicyManager.removeActiveAdmin(new ComponentName(this, DeviceMangerBc.class));
                showSet();
                break;
            case R.id.btn_lock_screen:
                devicePolicyManager.lockNow();
                break;
            default:

        }
    }

这里使用 startActivityForResult( ) ,可对跳转到激活设备管理器界面时做出判断,否则使用 startActivity( ) ,不管是否激活,都会执行相应代码

接下来就可以一键锁屏啦,但是今天的安卓机哪个不自带这个功能。。。-_-

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,790评论 4 61
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,041评论 25 709
  • 用汗水浇灌的花儿也会开… 仿佛回到领取“三好学生”奖状的幼小时光,小开心… 偶然发现成绩的数字竟然包含在里程数里,...
    雷不了人就以德服阅读 1,891评论 4 1
  • “每天吃够肉,活到一百六”——小白菜 你有没有经常到半夜,莫名的就想吃肉? 你会不会在工作日的下午,敲着键盘写着P...
    小白菜牛阅读 3,321评论 0 0
  • 儿子,你好: 有点儿激动和忐忑,下笔可能会“若有所思”。 文前作个小小声明,是医院的检查中意外发现,你是我儿子,不...
    空塚阅读 4,030评论 23 7

友情链接更多精彩内容