前不久换了部新手机,因为原来用的手机原装了一键锁屏的应用,用的还习惯,新手机上没有,就想着找一个装上,后来在网上搜了下一键锁屏的实现,自己拿来改了改,安装后感觉还可以。现在分享出来。
源码:
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);
}
}
设备 管理规范的类,它的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");
}
}
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.jb51.net/article/75556.htm