Android锁屏功能的开发与实现
来源:互联网 发布:水文地质钻孔数据 编辑:程序博客网 时间:2024/05/20 12:22
1.手机里系统自带了个一键锁屏的app,一时好奇研究了会,终于也实现了。博客也是好久没写了,东西做出来很久了,今天拿出来分享一下
扯点别的犊子,大半年都在忙着考研,没时间写博客,也是很惭愧呀,今天抽点时间把箱子翻一翻,看了一眼文件夹,还是还有很多东西能写的,乱系八糟的还有一堆东西做了,还没写过博客记录的。以后晚上回来就多抽时间补一补吧
2.不废话了,直接看看效果图吧,不过吧,锁屏也没什么图能截的,最好是把我最后给的源码里的apk安装体验一下吧
3.代码不长,主要一点需要说明,由于权限问题,需要每次锁屏前判断是否具有相关权限,即为代码中的activeManager方法,当然也可以直接在初始化时调用一次就行,就不多分析了,贴一部分代码吧,话都写在代码里了
public class MainActivity extends AppCompatActivity { float LightOld=0; boolean flag=true; private DevicePolicyManager policyManager; private ComponentName componentName; private SensorManager sensorManager; /* private TextView lightLevel; private TextView AccLevel; */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取设备管理服务 policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); //获取系统传感器的管理器 sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); //得到 光照传感器 Sensor sensorLight = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); Sensor sensorAcc = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); // 光照传感器注册(register)监听,参数为(SensorEventListener实例,传感器对象,输出信息速率) sensorManager.registerListener(listenerLight, sensorLight, SensorManager.SENSOR_DELAY_NORMAL); //同理。。 sensorManager.registerListener(listenerAcc,sensorAcc,SensorManager.SENSOR_DELAY_NORMAL); //AdminReceiver 继承自 DeviceAdminReceiver componentName = new ComponentName(this, LockReceiver.class); findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Lock(); } }); } void Lock(){ if (policyManager.isAdminActive(componentName)) { policyManager.lockNow(); //关闭当前app 当然了也可以选择不关闭 android.os.Process.killProcess(android.os.Process.myPid()); }else{ activeManager (); } } private void activeManager() { //使用隐式意图调用系统方法激活指定的设备管理器 Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"一键锁屏"); startActivity(intent); } private SensorEventListener listenerLight = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { if(flag){ flag=false; LightOld=event.values[0]; return; } float value = event.values[0]; //这里判断条件为当光线变化超过120时锁屏。实际测试发现 //不太好用,建议使用变化超过LightOld的百分比比较合理 if(Math.abs(value-LightOld)>120) { Toast.makeText(MainActivity.this,""+Math.abs(value-LightOld),Toast.LENGTH_SHORT ).show(); LightOld = value; Lock(); } //lightLevel.setText("Current light level is " + value + " lx"); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; private SensorEventListener listenerAcc= new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { //传感器数据发生变化时 float xValue = Math.abs(event.values[0]); float yValue = Math.abs(event.values[1]); float zValue = Math.abs(event.values[2]); if(xValue>15||yValue>15||zValue>50){ //Toast.makeText(MainActivity.this, "摇一摇", Toast.LENGTH_SHORT).show(); Lock(); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; @Override protected void onDestroy() { super.onDestroy(); if (sensorManager != null) { //注销监听 sensorManager.unregisterListener(listenerLight); sensorManager.unregisterListener(listenerAcc); } }}
4.还要补充说明的一点时,锁屏功能需要另外一些配置,直接看Manifest文件里面相关配置吧,也可以看到不需要什么权限,但是要激活设备管理器
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" 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=".LockReceiver"> <meta-data android:name="android.app.device_admin" android:resource="@xml/lock_screen" /> /*这个文件内容也很少 <?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> */ <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver> </application>
5.最后最重要的就是献上代码了,看代码就更清楚了,给出github地址,欢迎star,笔者能力有限,不足之处,欢迎留言讨论
源码请点击–》https://github.com/xugongming38/Perfect-Lock
阅读全文
0 0
- Android锁屏功能的开发与实现
- Android开发之实现锁屏功能
- android开发中倒计时功能的实现
- Android开发中倒计时功能的实现
- Android开发-03-倒计时功能的实现
- 【Android开发】图片拖拉功能的实现
- Android开发中搜索功能的实现
- android截屏与截长图截屏功能的实现
- Android 实现简单的锁屏功能
- Android开发学习之设置Android壁纸的功能实现
- Android开发,实现摇一摇功能
- Android开发中一些琐碎的小功能的实现
- Android的开发中搜索功能的实现
- TV开发中时移与回看功能的实现
- ajax开发:jqueryajax+php的登录与退出功能实现
- 基于Android源码开发的来电接通振动功能实现
- Android开发实现新浪账号授权登录的功能
- 基于Android源码开发的来电接通振动功能实现
- HDU 3016 Man Down(线段树+离散化+dp)
- 手把手教你如何在电脑本机传输文件到阿里云服务器上
- mybitis 利用association或collection传递多参数子查询
- 关于python IDLE无法显示行号的问题
- Mysql登录中文名称+密码不成功,原因是数据库编码不是utf8
- Android锁屏功能的开发与实现
- nodejs知识总结
- Mybatis 简单使用步骤
- JDBC、事物、连接池、DBCP、C3P0、DBUtils
- python 文件的基本处理
- 磁盘分区和文件系统
- jdbcBatch
- 大数据行业的”hello word” – word count
- A. The Useless Toy