Android 一键锁屏 问题与解决

来源:互联网 发布:怎么添加网络磁盘 编辑:程序博客网 时间:2024/06/05 08:12

想要转Android开发,刚开始研究Android,表示压力山大,主要我已经提出辞职了!

回归主题

Android2.2以后,直接使用DevicePolicyManager.lockNow()进行锁屏即可,问题是想要使用它,我们需要注册广播接受者为admin,代码如下

锁屏Activity:

package com.damon.lock;


import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;


public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

DevicePolicyManager devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);


ComponentName componentName = new ComponentName(this, MyAdmin.class);
if (devicePolicyManager.isAdminActive(componentName)) {
devicePolicyManager.lockNow();
} else {
Intent intent = new Intent(
DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
componentName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"One key lock screen need to active");
startActivity(intent);
}

//杀死自身程序 试试不kill什么效果就知道作用了
android.os.Process.killProcess(android.os.Process.myPid()); 
}
}


这里的MyAdmin是一个继承DeviceAdminReceiver的广播接受者,内无操作

package com.damon.lock;
import android.app.admin.DeviceAdminReceiver;
public class MyAdmin extends DeviceAdminReceiver {
}

比较特殊的就是这个广播接受者在 AndroidManifest.xml 中的注册

        <receiver android:name=".MyAdmin" >
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/my_admin" />
            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            </intent-filter>
        </receiver>

也就是在res xml添加my_admin文件。

<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
        <uses-policies>
                <force-lock />
        </uses-policies>
</device-admin>

如此一来便可以说是大功告成了。

但是还有几点需要注意:

1.程序在第一应用时获取了root权限,因此在用户卸载时,是得从安全-->设备管理器中取消授权才能卸载。我在想是不是可以注册一个监听器,在用户卸载程序时,如果是锁屏程序,就将Admin权限取消,让用户顺利卸载。不然就要被说成是流氓软件了

2.我的手机是小米手机,真机测试的时候,锁屏后,屏幕总是再亮一下,对此我很是郁闷,查看了小米自己的锁屏程序,发现它采用的是不同的锁屏方式,怪不得特意声明“MIUI专用锁屏工具,一键即时锁屏。 注意:仅小米手机可以使用,非小米手机无法使用“。小米的实现方式是通过PowerManager来处理的

public class LockActivity extends Activity
{
  public void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    ((PowerManager)getSystemService("power")).goToSleep(1L + SystemClock.uptimeMillis());
    new Handler()
    {
      public void handleMessage(Message paramAnonymousMessage)
      {
        LockActivity.this.finish();
      }
    }
    .sendEmptyMessageDelayed(0, 1000L);
  }
}

不知道这锁屏工具还有啥不好出,后面再说吧。我要搞个好看点的图片当icon,希望能有人下载用用~

工程结构如下图


原创粉丝点击