Android一键锁屏功能的实现

前不久换了部新手机,因为原来用的手机原装了一键锁屏的应用,用的还习惯,新手机上没有,就想着找一个装上,后来在网上搜了下一键锁屏的实现,自己拿来改了改,安装后感觉还可以。现在分享出来。


源码:
1. MainActivity.java
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    private DevicePolicyManager policyManager;
    private ComponentName componentName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //获取设备管理服务
        policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
        componentName = new ComponentName(this, AdminReceiver.class);

        //判断是否有锁屏权限,若有则立即锁屏并结束自己,若没有则获取权限
        if (policyManager.isAdminActive(componentName)) {
            policyManager.lockNow(); //立即锁屏
            finish();
        } else {
            activeManage();
            finish();
        }

        setContentView(R.layout.activity_main); //把这句放在最后,这样锁屏的时候就不会跳出来(闪一下)
    }

    //获取权限,需要激活后再次点击才会锁屏
    private void activeManage() {
        //启动设备管理 - 在AndroidManifest.xml中设定相应过滤器
        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        //权限列表
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
        //描述
        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "激活后才能使用锁屏功能哦");

        startActivity(intent);
    }
}
DevicePolicyManager类,为执行 设备 管理规范的类,它的lockNow()方法提供立即锁屏功能。

2. AdminReceiver.java
import android.app.admin.DeviceAdminReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;

public class AdminReceiver extends DeviceAdminReceiver {
    private static final String TAG = "AdminReceiver";

    @Override
    public void onEnabled(Context context, Intent intent) {
        super.onEnabled(context, intent);
        Log.d(TAG, "onEnabled");
        Toast.makeText(context, "激活成功", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        super.onDisabled(context, intent);
        Log.d(TAG, "onDisabled");
        Toast.makeText(context, "取消激活", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
        Log.d(TAG, "onReceive");
    }
}
DeviceAdminReceiver类,是设备管理组件,需要在程序中实现其子类(什么也没做),并在 AndroidManifest文件中 注册

3. AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.lock">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/lock"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/lock"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver
            android:name=".AdminReceiver"
            android:permission="android.permission.BIND_DEVICE_ADMIN">
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/lock" />
            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            </intent-filter>
        </receiver>
    </application>

</manifest>
上述代码中的lock是设备管理器的权限声明,在res/xml路径下以xml文件形式定义

4. lock.xml
<?xml version="1.0" encoding="UTF-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <uses-policies>
        <!--强制锁屏-->
        <force-lock />
    </uses-policies>
</device-admin>


在使用一键锁屏功能前,需要“激活”设备管理器,才能正常使用。我们安装后第一次打开时会弹出激活设备管理器页面,激活成功后,就可以使用啦。
但是存在一个问题,激活后安装的一键锁屏app不能正常卸载了,那怎么办呢? 去设置里找到“设备管理器”项(一般在“安全”或“系统安全”里面),就可以看到我们已经激活的一键锁屏app了,取消激活后,再去卸载即可。


参考: http://www.cnblogs.com/chenyg32/p/3719714.html 
          http://www.jb51.net/article/75556.htm  


猜你喜欢

转载自blog.csdn.net/wangsf1112/article/details/78218740