[Android] Android 锁屏实现与总结 (二)
上接:
系列文章链接如下:
代码文件地址:
https://github.com/wukong1688/Android-BaseLockScreen
2、Activity设置
锁屏Activity
LockScreenActivity.java
package com.jack.applockscreen.activity; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast; import com.jack.applockscreen.R;
import com.jack.applockscreen.util.Parser; import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date; public class LockScreenActivity extends AppCompatActivity implements LockScreenView.OnTriggerListener {
private KeyGuardReceiver mKeyGuardReceiver;
private LockScreenView mLockScreenView;
private TextView mTimeView;
private TextView mDateView;
private static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm"); private static final String[] DAY_OF_WEEK = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Parser.KEY_GUARD_INSTANCES.add(this); Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
); registerKeyGuardReceiver();//屏蔽Home setContentView(R.layout.activity_lock_screen); initViews(); Parser.killBackgroundProcess(this);
} @Override
protected void onResume() {
super.onResume();
// 设置该广告的左划收益和右划收益
mLockScreenView.setTargetDrawablesAndTexts(
R.mipmap.ic_lockscreen_trigger, R.mipmap.ic_lockscreen_unlock, "", ""); } private void initViews() {
mLockScreenView = (LockScreenView) findViewById(R.id.lock_screen_pad);
mTimeView = (TextView) findViewById(R.id.time);
mDateView = (TextView) findViewById(R.id.date);
mLockScreenView.setTargetDrawablesAndTexts(, R.mipmap.ic_lockscreen_unlock, null, null);
mLockScreenView.setOnTriggerListener(this); Date date = new Date();
Calendar calendar = Calendar.getInstance();
mTimeView.setText(TIME_FORMAT.format(date));
String dateString = (calendar.get(Calendar.MONTH) + ) + "月"
+ calendar.get(Calendar.DAY_OF_MONTH) + "日 "
+ DAY_OF_WEEK[calendar.get(Calendar.DAY_OF_WEEK) - ];
mDateView.setText(dateString);
} @Override
public void onBackPressed() { } public boolean onKeyDown(int keyCode, KeyEvent event) {
int key = event.getKeyCode();
switch (key) {
case KeyEvent.KEYCODE_BACK: {
return true;
}
case KeyEvent.KEYCODE_MENU: {
return true;
}
}
return super.onKeyDown(keyCode, event);
} private void registerKeyGuardReceiver() {
if (null == mKeyGuardReceiver) {
mKeyGuardReceiver = new KeyGuardReceiver();
registerReceiver(mKeyGuardReceiver, new IntentFilter());
}
} private void unregisterKeyGuardReceiver() {
if (mKeyGuardReceiver != null) {
unregisterReceiver(mKeyGuardReceiver);
}
} // 4.0以上无法屏蔽Home键,所以没什么作用
class KeyGuardReceiver extends BroadcastReceiver { static final String SYSTEM_REASON = "reason";
static final String SYSTEM_HOME_KEY = "homekey";// home key
static final String SYSTEM_RECENT_APPS = "recentapps";// long home key @Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra(SYSTEM_REASON);
if (reason != null) {
if (reason.equals(SYSTEM_HOME_KEY)) {
finish();
} else if (reason.equals(SYSTEM_RECENT_APPS)) {
}
}
} else if (action.equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED) || action.equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
finish();
}
}
} // 左划
@Override
public void onTriggerLeft() {
showToast("解锁成功");
finish();
} // 右划
@Override
public void onTriggerRight() {
showToast("解锁成功");
finish();
} private void showToast(String str) {
Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show();
} /**
* 网络中断时缓存收益信息
*/
private void saveProfitCache(String action, String phone, float profit, String advertiseId) { } @Override
protected void onDestroy() {
unregisterKeyGuardReceiver();
super.onDestroy();
} }
注意:
FLAG_DISMISS_KEYGUARD用于去掉系统锁屏页,FLAG_SHOW_WHEN_LOCKED使Activity在锁屏时仍然能够显示。
同时记得需要加入权限到manifest中
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
对应布局文件activity_lock_screen.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#6c6c6c"> <com.jack.applockscreen.activity.LockScreenView
android:id="@+id/lock_screen_pad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="36dp">
</com.jack.applockscreen.activity.LockScreenView> <RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="32dp"
android:paddingRight="32dp"
android:paddingTop="50dp"> <TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:textColor="@android:color/white"
android:textSize="36dp"
android:typeface="serif" /> <TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginTop="8dp"
android:textColor="@android:color/white"
android:textSize="16dp"
android:typeface="serif" /> </RelativeLayout> </FrameLayout>
下接文件:
本博客地址: wukong1688
本文原文地址:https://www.cnblogs.com/wukong1688/p/10725092.html
转载请著名出处!谢谢~~
[Android] Android 锁屏实现与总结 (二)的更多相关文章
- Android逆向之旅---Android中锁屏密码算法解析以及破解方案
一.前言 最近玩王者荣耀,下载了一个辅助样本,结果被锁机了,当然破解它很简单,这个后面会详细分析这个样本,但是因为这个样本引发出的欲望就是解析Android中锁屏密码算法,然后用一种高效的方式制作锁机 ...
- Android忘记锁屏密码如何进入手机?
Android忘记锁屏密码如何进入手机? 1.关闭手机 2.进入recovery模式(即恢复模式,记住不是挖煤模式.进入恢复模式不同手机有不同方法,三星的话安主页键,关机键和音量+(或-键), ...
- Android一键锁屏源码
APK下载 源程序下载 锁屏流程如下(参考于Android一键锁屏开发全过程[源码][附图]) 源码参考于一键锁屏 源码 一共有2个Java文件: package com.example.onekey ...
- 【腾讯Bugly干货分享】浅谈Android自定义锁屏页的发车姿势
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57875330c9da73584b025873 一.为什么需要自定义锁屏页 锁屏 ...
- 浅谈 Android 自定义锁屏页的发车姿势
作者:blowUp,原文链接:http://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg==&mid=2653577446&idx=2&sn= ...
- 浅谈Android自定义锁屏页的发车姿势
一.为什么需要自定义锁屏页 锁屏作为一种黑白屏时代就存在的手机功能,至今仍发挥着巨大作用,特别是触屏时代的到来,锁屏的功用被发挥到了极致.多少人曾经在无聊的时候每隔几分钟划开锁屏再关上,孜孜不倦,其酸 ...
- Android定时锁屏功能实现(AlarmManager定时部分)
菜鸟入坑记——第一篇 关键字:AlarmManager 一.AlarmManager简介: 参考网址:https://www.jianshu.com/p/8a2ce9d02640 参考网 ...
- android开发 锁屏 真正的锁屏,是go锁屏那种。
想做个锁屏界面很久了,最近一周,历经千辛万苦,越过种种挫折,终于完美实现了这一要求,在此将锁屏思路分享出来. 注意:这不是什么一键锁屏,是类似“go锁屏”那样的锁屏界面. 准备:本程序共需要 两个ac ...
- Android LockScreen (锁屏弹窗)
在要弹窗的Activity需要进行以下设置,才可以在锁屏状态下弹窗 @Override protected void onCreate(Bundle savedInstanceState) { fin ...
- Android一键锁屏APP
题记: 这个app完全是拾人牙慧,作为练手用的,其实没有什么原创的东西.当然,博客还是我自己写的,记录下来,对自己也算是一种成长吧. 转载请注明原文地址: http://www.cnblogs.com ...
随机推荐
- 【English】20190328
Emotions情绪 [ɪ'moʊʃənz] Run Your Life for Teens影响你的青少年生活[ti:nz] Don't Let Your Emotions Run Your Lif ...
- Windows Service 学习系列(二):C# windows服务:安装、卸载、启动和停止Windows Service几种方式
一.通过InstallUtil.exe安装.卸载.启动.停止Windows Service 方法一 1.以管理员身份运行cmd 2.安装windows服务 切换cd C:\Windows\Micros ...
- 新建swap分区的规划、挂载和自动挂载示例
注:来自Linux系统管理_磁盘分区和格式化的扩展 Linux系统管理_磁盘分区和格式化:http://murongqingqqq.blog.51cto.com/2902694/1361918 思路: ...
- CentOS 7 中使用NTP进行时间同步
1. NTP时钟同步方式说明NTP在linux下有两种时钟同步方式,分别为直接同步和平滑同步: 直接同步 使用ntpdate命令进行同步,直接进行时间变更.如果服务器上存在一个12点运行的任务,当前服 ...
- Nginx负载均衡的4种方式 :轮询-Round Robin 、Ip地址-ip_hash、最少连接-least_conn、加权-weight=n
这里对负载均衡概念和nginx负载均衡实现方式做一个总结: 先说一下负载均衡的概念: Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法. 我们知道单台服务 ...
- Linux-基础学习(一)-基本命令
开始今日份整理 1.Linux的文件目录操作 1.1 ls 简述:ls是list的缩写,用于列出指定目录或文件 常用的选项 1 -a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为隐藏, ...
- 读书笔记---<<图解HTTP>>(一)
一.了解Web及网络基础 1. 网络基础TCP/IP 通常使用的网络包括互联网都是在TCP/IP协议族的基础上运作的,而HTTP属于它内部的一个子集. 1.1 TCP/IP协议族 像这样吧与互联网关联 ...
- .net core下用HttpClient和asp.net core实现https的双向认证
关于https双向认证的知识可先行google,这时矸接代码. 为了双向认证,我们首先得准备两个crt证书,一个是client.crt,一个是server.crt,有时为了验证是否同一个根证书的验证, ...
- Flask中使用数据库连接池 DBUtils ——(4)
DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不会关闭,只是把连接重新放到连接池,供自己线程 ...
- Linux nfs下载安装与简单配置
1.什么是NFS? 全称 network file system 网络文件系统 通过网络存储和组织文件的一种方法或机制. 2.为什么要用共享存储? 前端所有的应用服务器接收到用户上传的图片.文件.视频 ...