时间过去很久都没有进行更新,好多创作者在面对那些等待着的读者时,都会产生愧疚之感,然而实际的情况是,工作方面以及生活当中所存在的压力,经常会把原本制定好的计划给搅乱。
创作中断的常见原因
进入关乎工作项目的关键阶段之时,持续开展加班已然成为一种常态,个人所拥有的时间遭到大面积严重压缩,原本预先留出准备写作的时段,不得不作出让位之举,家庭方面所涉及的事务或者健康层面出现的问题,也极有可能陡然冒将出来,从而把所有既定安排全部打乱 。
虽计划好的文章框架以及资料就在手头呢,但是却抽不出完整的一到两小时去梳理使其成文呀。这种被迫出现的耽搁,极易让人产生对于读者的亏欠之感,进而形成心理压力呢。
重新开始的关键一步
第一步是处理完手头堆积着的事务,像是在周末把工作报告集中处理完毕,又或者是解决掉一件家庭琐事这类,这能够减轻自身承担的负担,进而为写作留出心理方面的空间 。
别老是深陷于愧疚的情绪之中,行动才是最为绝佳的解决之道。哪怕仅仅只是开启文档而写下寥寥数行文字,这同样能够切实有效地冲破停滞不前的状态,进而再度构建起与创作之间的关联。
锁屏消息提醒的核心逻辑
这个功能主要是用于应用在后台运行,并且是在收到新消息的时候。此功能的触发,它是取决于特定的系统广播。当用户手机屏幕关闭之时,系统能够自动亮屏,并且还会弹窗提示,以此确保重要信息不会被错过 。
**
* 模拟推送,在退出APP后的一段时间发送消息
*/ /**
* 模仿推送,发消息
*/
private void sendMessage() { new Thread(new Runnable() { @Override
public void run() { try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Intent intent = new Intent();
intent.setAction("com.zx.lockscreenmsgdemo.LockScreenMsgReceiver");
sendBroadcast(intent); //发送广播
}
}).start();
}
}
在进行实现之际,应用所要做的是,针对自身服务器亦或是模拟出来的推送消息展开监听。只要一旦接收到,便去发送一条自定义的广播。广播接收器随之被唤醒,紧接着马上判断当前存在的屏幕处在何种状态,也就是是否处于关闭状态 。
广播的发送与接收机制
凭借是技术演示的缘故,可以不必仰仗第三方推送服务 ,能够去构建一个后台服务 ,在应用退出之后还是执行 。举例来说 ,在退出长达五秒之后 ,此服务模仿发送则 “新消息抵达 ”的广播 。
这条广播携带着必要的信息,广播接收器得提前进行注册,并且要指定为只接收这条自定义广播,这是整个流程的启动开关,确保了事件能够被准确捕获。
**
* 监听锁屏消息的广播接收器
*/public class LockScreenMsgReceiver extends BroadcastReceiver { private static final String TAG = "LockScreenMsgReceiver"; @Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "onReceive:收到了锁屏消息 ");
String action = intent.getAction(); if (action.equals("com.zx.lockscreenmsgdemo.LockScreenMsgReceiver")) { //管理锁屏的一个服务
KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
String text = km.inKeyguardRestrictedInputMode() ? "锁屏了" : "屏幕亮着的";
Log.i(TAG, "text: " + text); if (km.inKeyguardRestrictedInputMode()) {
Log.i(TAG, "onReceive:锁屏了 "); //判断是否锁屏
Intent alarmIntent = new Intent(context, MessageActivity.class); //在广播中启动Activity的context可能不是Activity对象,所以需要添加NEW_TASK的标志,否则启动时可能会报错。
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(alarmIntent); //启动显示锁屏消息的activity
}
}
}
}
锁屏弹窗的显示条件
被触发的广播接收器,首要任务是判定屏幕状态,借助调用系统API,能够知晓屏幕是否已被锁闭,唯有在确定屏幕处于关闭状态时,才会持续执行弹窗显示的逻辑。
假设屏幕自身处于点亮状况,表明用户正处在使用手机的状态,在这个时候要是再弹出来全屏遮罩样式的窗口反倒会对操作形成干扰。所以说,这个条件判断极其要害,它抉择了功能是不是在合适的时机开启。
public class MessageActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
Log.i("tag", "onCreate:启动了消息内容的activity "); //四个标志位顾名思义,分别是锁屏状态下显示,解锁,保持屏幕长亮,打开屏幕。这样当Activity启动的时候,它会解锁并亮屏显示。
Window win = getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED //锁屏状态下显示
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD //解锁
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON //保持屏幕长亮
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); //打开屏幕// Drawable wallPaper = WallpaperManager.getInstance( this).getDrawable();// win.setBackgroundDrawable(wallPaper);
setContentView(R.layout.activity_message);
}
}
实现弹窗的技术要点
这个弹出的窗口,它可不是一般那种飘浮着显示的窗口,它是一种特定情况下才会特别跳出来的对话框物体,这个物体它的窗口类型是设置了关键的标记用的位置的。正是在于这些标记位置的信息,才赋予了它在屏幕锁定界面呈现出来显示状态的能力。
常规所运用的标志位涵盖哟:准许于锁屏状态之下予以显示,将屏幕点亮起来,使得屏幕得以持续处于常亮的那般情形等等。当窗口弹出之际,系统会依照标志位去执行解锁以及亮屏的相关操作,借此让消息能够直直地呈现在用户眼前哟。
弹窗的视觉与交互细节
为达成视觉融合之目的,一般会把弹窗背景调试成当下手机壁纸那般,如此一来,弹窗看上去仿若自锁屏界面自然而然地浮现出来,倘若背景被设置成白色或者透明的话,就将显露出底层界面,进而对视觉整体性予以破坏 。
用户点击弹窗里的消息之后,得先借助系统自身具备的锁屏验证手段(像密码或者指纹这类),如此方可跳转至应用内部的具体消息页面,这对安全性以及流程的完整性起到了保障作用 。
必要的权限与声明
在安卓系统里头,得在安卓清单文件里,为展示锁屏弹窗的活动声明对应的属性,就像安卓显示在锁屏上这个属性。与此同时,或许还得去申请点亮屏幕之类的系统权限。
功能合法合规的基础在于权限的合理声明跟使用,开发者需去审慎详实地查阅对应系统版本所提出的要求境地,以此来对应用是否契合平台规范予以断定,规避因权限方面出现了问题而致使功能归于失效现象的发生。
//先解锁系统自带锁屏服务,放在锁屏界面里面KeyguardManager keyguardManager = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE);
keyguardManager.newKeyguardLock("").disableKeyguard(); //解锁//点击进入消息对应的页面mContext.startActivity(new Intent(mContext, DetailsActivity.class));
finish();
是否有过长时光,因现实因素,而无奈将自己预先规划好的事情予以搁置之时情况。诚挚邀请在评论区域分享自身经历以及做出调整的方式办法。要是感觉此文存在契合点一同感受,请实施点赞给予支持 。
020-88888888
全国服务热线