应用安装后屏幕上会出现两个图标,点击“一键锁屏”时,若未配置设备管理器权限,则跳转到“配置一键锁屏界面”,否则直接锁屏
效果图
1. 新建 LockScreen.java 文件,添加“一键锁屏”代码
//一键锁屏
public class LockScreen extends AppCompatActivity {
private DevicePolicyManager devicePolicyManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
devicePolicyManager =(DevicePolicyManager)getSystemService(DEVICE_POLICY_SERVICE);
//若未注册设备管理器,跳转到配置界面
try{
devicePolicyManager.lockNow();
finish();
}
catch (Exception e){
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
}
}
2.在 MainActivity 中配置一键锁屏代码
2.1 放置3个按钮,btnSetAdmin, btnCancleAdmin, btnLockScreen 分别为注册设备管理器,注销设备管理器,一键锁屏。注册与注销按钮每次只能显示一个,故在 xml 文件中将注册与注销按钮放在一个 FrameLayout 中,利用 android:visibility 设置是否可见
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/btn_set_admin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/set_admin"/>
<Button
android:id="@+id/btn_cancle_admin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"//初始界面注销按钮不可见
android:text="@string/cancle_admin"/>
</FrameLayout>
<Button
android:id="@+id/btn_lock_screen"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:text="@string/lock_screen"/>
2.2 将按钮可见设置封装起来便于多次使用;初始化时,显示取消设备管理器界面
//取消设备管理器界面
private void showCancle() {
btnSetAdmin.setVisibility(View.INVISIBLE);
btnCancleAdmin.setVisibility(View.VISIBLE);
btnLockScreen.setVisibility(View.VISIBLE);
}
//设置设备管理器界面
private void showSet(){
btnSetAdmin.setVisibility(View.VISIBLE);
btnCancleAdmin.setVisibility(View.INVISIBLE);
btnLockScreen.setVisibility(View.INVISIBLE);
}
DevicePolicyManager devicePolicyManager = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
//若已注册设备管理器,显示取消设备管理器页面
if(devicePolicyManager.isAdminActive(new ComponentName(this, DeviceMangerBc.class))){
showCancle();
}
2.3 新建 DeviceMangerBc.java 文件,设置广播接收器并且在 广播接收器配置文件中添加 <meta-data> 、<intent-filter>(这里弹出 Toast 提示)
//广播接收器
public class DeviceMangerBc extends DeviceAdminReceiver{
@Override
public void onEnabled(Context context, Intent intent) {
super.onEnabled(context, intent);
Toast.makeText(context, "已获取设备管理者权限", Toast.LENGTH_SHORT).show();
}
@Override
public void onDisabled(Context context, Intent intent) {
super.onDisabled(context, intent);
Toast.makeText(context, "已取消设备管理者权限", Toast.LENGTH_SHORT).show();
}
}
<receiver android:name=".DeviceMangerBc">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
<action android:name="android.app.action.DEVICE_ADMIN_DISABLED" />
</intent-filter>
</receiver>
2.4 按钮逻辑设置
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_set_admin:
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, new ComponentName(this, DeviceMangerBc.class));
startActivityForResult(intent, 1);
break;
case R.id.btn_cancle_admin:
devicePolicyManager.removeActiveAdmin(new ComponentName(this, DeviceMangerBc.class));
showSet();
break;
case R.id.btn_lock_screen:
devicePolicyManager.lockNow();
break;
default:
}
}
这里使用 startActivityForResult( ) ,可对跳转到激活设备管理器界面时做出判断,否则使用 startActivity( ) ,不管是否激活,都会执行相应代码
接下来就可以一键锁屏啦,但是今天的安卓机哪个不自带这个功能。。。-_-
网友评论