Android一键锁屏功能的实现

来源:互联网 发布:大溪淘宝拍照 编辑:程序博客网 时间:2024/05/20 12:49

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


源码:
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>

代码下载:http://download.csdn.net/download/wangsf1112/10018607 

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


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