想要转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,希望能有人下载用用~
工程结构如下图