Android 实现简单的锁屏功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/maoruibin9035/article/details/45770201

写正题之前先闲扯几句。因为前段时间自己的手机电源键不灵,所以手机不能及时锁屏,一度让我很苦恼,后来通过在系统设置找到一个另类的方法,设置让音量键锁屏,最终也解决了问题,但是觉得还是不够爽,作为程序员,自己可以完全动手diy一个属于自己的锁屏程序啊 ,灵机一动,就自己查资料做了一个简单的锁屏demo.实现起来倒是不难,但是觉得还是有必要记录一下,如果能帮助到更多的人,何乐而不为呢。转入正题。

首先新建一个项目 项目名随便起了。

接着在主页的布局文件中加入一个按钮,这个按钮就是我们的锁屏按钮了 很简单,代码如下

<Button android:text="锁屏"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="lockScreen"/>

接着在MainActivity.java文件中实现上面button的点击时间回调方法lockScreen方法 ,当然目前就是一个空实现 如下,具体逻辑代码一会再补充

   public void lockScreen(View view){
        
   }
接下来创建一个空的广播接受者AdminManageReceiver.java  如下
import android.app.admin.DeviceAdminReceiver;

public class AdminManageReceiver extends DeviceAdminReceiver {

}

既然出现了广播 就应该第一时间在Manifest文件中注册,如下

        <receiver
            android:name=".AdminManageReceiver"
            android:label="@string/app_name"
            android:permission="android.permission.BIND_DEVICE_ADMIN" >
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/device_admin" />
            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            </intent-filter>
        </receiver>


注意这里的注册和别的广播注册有一个小的差别,注意红字部分。这里需要一个资源文件的支持,我们在res目录下面创建名为xml的文件夹,并在xml文件夹下面新建文件device_admin.xml文件。文件内容如下
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <force-lock />
    </uses-policies>
</device-admin>

接下来最重要的操作就在MainActivity.java中完成。代码并不多。

MainActivity.java 代码如下

public class MainActivity extends ActionBarActivity {
    ComponentName mAdminName;
    DevicePolicyManager mDPM;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mAdminName = new ComponentName(this, AdminManageReceiver.class);
        mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);

        //如果设备管理器尚未激活,这里会启动一个激活设备管理器的Intent,具体的表现就是第一次打开程序时,手机会弹出激活设备管理器的提示,激活即可。
        if (!mDPM.isAdminActive(mAdminName)) {
            showAdminManagement(mAdminName);
        }
    }

    //执行锁屏
    public void lockScreen(View view){
        if (mDPM.isAdminActive(mAdminName)) {
            mDPM.lockNow();
        }
    }
    
    //激活设备管理器
    private void showAdminManagement(ComponentName mAdminName) {
        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminName);
        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "activity device");
        startActivityForResult(intent,1);
    }
}


注意:因为锁屏功能的实现需要激活设备管理器,所以第一次运行程序会出现如下激活设备管理器的界面。点击激活即可

激活设备界面

DevicePolicyManager是一个和设备管理相关的类,他提供了很多与设备管理相关的方法,如resetPassword() 设置锁屏密码 wipeData() 恢复出厂设置/擦出手机数据 慎用!!等等,还有很多方法,可以查看文档DevciePolicyManager

注意:如果你想卸载这个锁屏程序,可能会出现卸载失败的情况,此时你只要在系统设置中找到对应的设备管理器程序(设备管理器的控制界面在不同的手机系统中位置是不一样的,在MIUI中可以通过  设置 -> 安全和隐私 -> 设备管理-> 设备管理器找到),然后取消激活这个程序,就可以执行正常的卸载了。

demo源代码    https://github.com/maoruibin/LockScreenDemo   

没有更多推荐了,返回首页