这个手机没有自带一键锁屏,在应用商店也没有搜到,下载了几个“锁屏APP”试试发现要许多权限呢,还是自己做一个吧放心点。其他手机应该也能用吧。

打包好的应用下载:

https://download.csdn.net/download/bigc2001/52514516https://download.csdn.net/download/bigc2001/52514516源代码下载:LockMyPhone.rar-Android文档类资源-CSDN下载为安卓手机做的一个APP,能够一键锁屏。这个版本不能自动打开设备管理器,需要手工到“安全”-“设备管更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/bigc2001/52016899

这篇文章记录了所有的开发源代码,同时编译好的应用也放到了资源区。

1,从AndroidManifest.xml开始:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="net.csdn.bigc2001.lockmyphone"><applicationandroid:allowBackup="false"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.LockMyPhone"><receiverandroid:name=".MyDeviceAdminReceiver"android:enabled="true"android:exported="true"android:permission="android.permission.BIND_DEVICE_ADMIN"><meta-dataandroid:name="android.app.device_admin"android:resource="@xml/device_admin" /><intent-filter><action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /></intent-filter></receiver><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

2, MainActivity

package net.csdn.bigc2001.lockmyphone;import android.app.Activity;
import android.app.admin.DeviceAdminReceiver;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;import androidx.annotation.Nullable;import java.util.Locale;public class MainActivity extends Activity {private static final String tag = "+>MainActivity";private DevicePolicyManager policyManager;private SharedPreferences preferences;public static final String FLAG = "flag.enable";private boolean needDeviceManager = false;private TextView tvMemo;private ImageView imageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.d(tag, "--onCreate");policyManager = (DevicePolicyManager) MainActivity.this.getSystemService(Context.DEVICE_POLICY_SERVICE);preferences = PreferenceManager.getDefaultSharedPreferences(this);if ("1".contains(preferences.getString(FLAG, "0"))) {Log.d(tag, "已正常运行,不需要显示提示界面了");this.setTheme(android.R.style.Theme_NoDisplay);lockMyPhone();}needDeviceManager = true;Log.d(tag, "不能正常锁屏,需要提示用户去设置权限");setContentView(R.layout.activity_main);this.tvMemo = this.findViewById(R.id.tvMemo);this.imageView = this.findViewById(R.id.imgPic);}@Overrideprotected void onStart() {super.onStart();Log.d(tag, "--onStart 厂商:" + Build.BRAND + ", 型号:" + android.os.Build.MODEL);if (needDeviceManager) requestDeviceManager();String brand = Build.BRAND;if (brand == null) brand = "";else brand = brand.toLowerCase(Locale.ROOT);if (brand.contains("vivo")) {//针对不同设备做个性化提醒,这里就不继续做了,意思一下this.tvMemo.setText("应用需要权限才能使用,您可以到“设置-更多设置-安全-设备管理器”中,激活本应用的管理权限,如下图所示:");this.imageView.setImageResource(R.drawable.dev_manager_vivo);} else {this.tvMemo.setText("应用需要权限才能使用,您需要找到您手机的“设备管理器”功能,激活本应用的管理权限,类似下图所示:");this.imageView.setImageResource(R.drawable.dev_manager_vivo);}}@Overrideprotected void onResume() {super.onResume();Log.d(tag, "--onResume");}private void lockMyPhone() {try {policyManager.lockNow();preferences.edit().putString(FLAG, "1").apply();MainActivity.this.finish();} catch (SecurityException e) {Log.e(tag, "未获得权限");}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);Log.d(tag, "--onActivityResult =" + resultCode);}private void requestDeviceManager() {Log.d(tag, "准备请求管理器权限");ComponentName componentName = new ComponentName(MainActivity.this, LockPhoneReceiver.class);if (policyManager == null) {Log.d(tag, "无法获得设备安全管理器");return;}//使用隐式意图调用系统方法来激活指定的设备管理器Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "一键锁屏");this.startActivityForResult(intent, 0);}private static class LockPhoneReceiver extends DeviceAdminReceiver {@Overridepublic void onReceive(Context context, Intent intent) {super.onReceive(context, intent);Log.d(tag, "onreceiver");}@Overridepublic void onEnabled(Context context, Intent intent) {super.onEnabled(context, intent);Log.d(tag, "激活使用");}@Overridepublic void onDisabled(Context context, Intent intent) {super.onDisabled(context, intent);Log.d(tag, "取消激活");}}
}

3,MyDeviceAdminReceiver

package net.csdn.bigc2001.lockmyphone;import android.app.admin.DeviceAdminReceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.util.Log;public class MyDeviceAdminReceiver extends DeviceAdminReceiver {private static final String tag = "+>DeviceAdminReceiver";@Overridepublic void onReceive(Context context, Intent intent) {super.onReceive(context, intent);Log.d(tag, "设备管理:onReceive");}@Overridepublic void onEnabled(Context context, Intent intent) {// 设备管理:可用Log.d(tag, "设备管理:可用");PreferenceManager.getDefaultSharedPreferences(context).edit().putString(MainActivity.FLAG, "1").apply();}@Overridepublic void onDisabled(final Context context, Intent intent) {// 设备管理:不可用Log.d(tag, "设备管理:不可用");}@Overridepublic CharSequence onDisableRequested(Context context, Intent intent) {Log.d(tag, "==onDisableRequested");return "这是一个可选的消息,警告有关禁止用户的请求";}}

4,res\layout\activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_margin="10dp"tools:context=".MainActivity"><TextViewandroid:id="@+id/tvMemo"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="parent" /><ScrollViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintLeft_toLeftOf="@id/tvMemo"app:layout_constraintTop_toBottomOf="@id/tvMemo"><ImageViewandroid:id="@+id/imgPic"android:layout_width="wrap_content"android:layout_height="wrap_content" /></ScrollView></androidx.constraintlayout.widget.ConstraintLayout>

5,res\xml\device_admin.xml

<?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>

全部代码也就这么多了,编译后尝试使用,发现不能自动弹出“设备管理器”,但是手动在设备管理器里激活(或启用)自己作得这个APP后,可以一键锁屏。不能自动弹出的问题以后有机会再摸索吧。

学做安卓一键锁屏应用相关推荐

  1. 立波教你做安卓一键锁屏软件

    这几天感觉需要自己搞一个自己需要锁屏的软件了,没有好用的,就自己动手做一个,做技术的就这一点好处,自力更生丰衣足食. 先上一个效果图吧: 这个图我们简单罗列一下功能点: [1]日期和时间的显示 [2] ...

  2. [安卓应用发布]HOLO一键锁屏

    一个极简的一键锁屏应用,holo风格,使用系统默认图标. http://pan.baidu.com/s/1ovOqt 截图: 转载于:https://www.cnblogs.com/zijinzhen ...

  3. (安卓)一键锁屏 ---亲测!

    一键锁屏的实现原理:当按锁屏键的时候,会发出一个广播,当用户界面接收到一个广播的时候就可以实现锁屏.而广播的发送是我们调用DevicePolicyManager(设备管理接收者)中的lockNow() ...

  4. DevicePolicyManager(三)设备管理器使用案例——实现一键锁屏

    1.实现一键锁屏关键是DevicePolicyManager这个类,然后使用lockNow():方法. 2.DevicePolicyManager类,可以让你的做软件获得系统级别的操作,例如锁屏,恢复 ...

  5. Android一键锁屏功能的实现

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

  6. Android - 定位方式,火星坐标系统,一键锁屏,字节Android高工面试

    private class MyLocationListener implements LocationListener{ //位置发生变化的时候 @Override public void onLo ...

  7. android DevicePolicyManager实现一键锁屏

    本文章一部分资料来源于网上 1.实现一键锁屏关键是DevicePolicyManager这个类,然后使用lockNow():方法. 2.DevicePolicyManager类,可以让你的做软件获得系 ...

  8. DevStore一键锁屏源码学习

    项目结构: 代码 MainActivity.java package com.test.lockscreen;import com.test.lockscreen.LockReceiver;impor ...

  9. Android Device Administration 设备管理器——实现一键锁屏

    Android Device Administration 设备管理器--实现一键锁屏 最近研究了一下安全这一块的内容,当然,我是比较水的,所以也拿不出什么好知识点,但是有一些冷门的东西我还是可以聊聊 ...

最新文章

  1. 2022-2028年中国芯片封测行业深度调研及投资前景预测报告(全卷)
  2. 云计算设计模式(十)——守门员模式
  3. maven打包war,导入本地jar包
  4. Hadoop- MapReduce分布式计算框架原理
  5. 关于“如何破坏单例“我说了好几种方式,面试官却说:我其实随便问问,没想到你真会
  6. 【pmcaff】打开页面,这个行为值多少钱?
  7. 【MySQL】计算 TPS,QPS 的方式
  8. 刺猬文│从启动方式来看播客链的运行机制—设置验证者
  9. JetBrains发布两项重要更新:基于IDE的远程开发解决方案、轻量级编辑器Fleet
  10. Hadoop精华问答 | 关于Hadoop核心技术的精华问答
  11. 优先队列-二叉堆-堆排序原理-Java相关API
  12. 基于模糊PID控制的光伏系统最大功率点跟踪的研究
  13. coreldraw怎么改成半圆形_cdr怎么把图形修剪成指定的形状?
  14. 计算机时间无法更改,电脑时间不能修改|系统时间改不了 四个解决方法
  15. PS学习笔记(88天和我一起学会PS)(8/88)
  16. python画笔属性_python 画图 turtle 模块介绍之(一)
  17. SpringMVC个人零碎总结
  18. c++最近公共祖先LCA(倍增算法和tarjan)
  19. leetcode-838:推多米诺
  20. IE不能上网浏览的常见原因和解决方法:

热门文章

  1. #python元组(元组的创建和删除)
  2. 许家印的新战略 恒大的新未来
  3. 对拉格朗日乘数法和KKT条件的简单理解(来自PRML的附录)
  4. DC-DC,看这篇文章就够了
  5. 医疗机械公司网站网页
  6. 计算机网络专业自考本科难不难,自考本科计算机网络专业科目难吗?
  7. Java学习之路3——方法定义、调用【重拾Java】
  8. uboot源码分析-启动第一阶段
  9. 视频编辑软件-剪辑制作后期配音字幕合并剪切图片电子相册Mac手机
  10. 推荐10个关键时刻能派上大用场的神级软件,帮你解决80%的问题