默认
打赏 发表评论 5
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
高仿手机QQ的Android版锁屏聊天消息提醒功能 [附件下载]
阅读(83006) | 评论(5 收藏1 淘帖1
微信扫一扫关注!

1、前言


今天为大家带来的是,可以在锁屏下弹窗显示消息来提醒用户,可用于移动端IM或消息推送应用中。

效果图如下:
高仿手机QQ的Android版锁屏聊天消息提醒功能 [附件下载]_4134622-78e9cc9dfe0bcbf2.jpg

适用应用场景:
此功能可用于移动端IM中,场景是应用没有完全退出的情况下在后台运行时,如果用户已经关闭了手机屏幕,如果我们的APP收到推送消息,则打开手机屏幕,弹框显示消息的方式来提醒用户。

2、实现思路


在收到自己服务器的推送消息时,发送一条广播,在接收到指定广播之后在广播的onReceive()中判断当前屏幕是否处于关闭状态,如果处于关闭状态,则显示这个弹窗消息,反之,则不需要显示。

3、实现步骤


3.1Service中发送广播


由于写这个demo,没有引入第三方推送,我就用Service来代替,大致就是说,开启一个后台服务,在退出APP后,任然在运行,在退出5s后,发送一条广播消息,通知广播接收器有新的消息需要提示用户。
// 模拟推送,在退出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();
    }
}

3.2在广播中启动锁屏弹窗


我们设置的是锁屏下才弹窗的,非锁屏下就不适合弹出这个窗口了。注册一个广播接收器,在接收到指定广播之后判断是否需要弹窗。
/**
 * 监听锁屏消息的广播接收器
 */
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
            }
        }
    }
}

注意:

  • KeyguardManager类,用来管理锁屏的,4.1之后该类的API新增了一个isKeyguardLocked()的方法判断是否锁屏,但在4.1之前,我们只能用inKeyguardRestrictedInputMode()方法,如果为true,即为锁屏状态;
  • 在广播中启动Activity的context可能不是Activity对象,有可能是Service或者其他BroadcastReceiver,所以需要添加NEW_TASK的标志,否则启动时会报错。

3.3Activity来显示弹窗消息


QQ的弹窗一开始我以为是悬浮View,用WindowManager去添加,后来尝试,查阅资料之后才发现是一个Activity,只不过它的背景用的就是你手机的这个背景而已。
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);
    }
}

之所以能够在锁屏状态下显示消息就是因为窗体对象的这个添加标志位的这个方法起了作用。四个标志位的作用,分别是锁屏状态下显示,解锁,保持屏幕长亮,打开屏幕。这样当Activity启动的时候,它会解锁并亮屏显示。保持屏幕长亮这个标志位是可选的。

设置了背景为壁纸的背景,所以显示的是桌面的背景。如果背景设为默认的白色,则导致弹窗后面是一片白色,看起来很丑。如果背景设置为透明,则弹窗后面会显示出解锁后的界面(即使有锁屏密码,也是会显示解锁后的界面的),一样很影响视觉效果。

3.4点击消息内容的时候


当显示完消息,点击消息内容的时候,需要先先解锁系统自带锁屏服务,才能进入我们对应的消息界面:
//先解锁系统自带锁屏服务,放在锁屏界面里面
KeyguardManager keyguardManager = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE);
keyguardManager.newKeyguardLock("").disableKeyguard(); //解锁
//点击进入消息对应的页面
mContext.startActivity(new Intent(mContext, DetailsActivity.class));
finish();


3.5需要的配置和权限


然后在AndroidManifest.xml文件当中,对该activity的声明需要加上以下属性:
<activity
            android:name=".activity.MessageActivity"
            android:excludeFromRecents="true"
            android:launchMode="singleInstance"
            android:taskAffinity="" />

需要的权限:
  <!-- 解锁屏幕需要的权限 -->
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <!-- 申请电源锁需要的权限 -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />

4、源码附件下载


LockScreenMsgDemo-master(52im.net).zip (160.54 KB , 下载次数: 100 , 售价: 2 金币)

附录:全站精品资源下载


[1] 精品源码下载:
轻量级即时通讯框架MobileIMSDK的iOS源码(开源版)[附件下载]
开源IM工程“蘑菇街TeamTalk”2015年5月前未删减版完整代码 [附件下载]
微信本地数据库破解版(含iOS、Android),仅供学习研究 [附件下载]
NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战 [附件下载]
NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战 [附件下载]
NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示 [附件下载]
NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示 [附件下载]
用于IM中图片压缩的Android工具类源码,效果可媲美微信 [附件下载]
高仿Android版手机QQ可拖拽未读数小气泡源码 [附件下载]
一个WebSocket实时聊天室Demo:基于node.js+socket.io [附件下载]
Android聊天界面源码:实现了聊天气泡、表情图标(可翻页) [附件下载]
高仿Android版手机QQ首页侧滑菜单源码 [附件下载]
开源libco库:单机千万连接、支撑微信8亿用户的后台框架基石 [源码下载]
分享java AMR音频文件合并源码,全网最全
微信团队原创Android资源混淆工具:AndResGuard [有源码]
一个基于MQTT通信协议的完整Android推送Demo [附件下载]
Android版高仿微信聊天界面源码 [附件下载]
高仿手机QQ的Android版锁屏消息提醒功能 [附件下载]
仿微信的IM聊天时间显示格式(含iOS/Android/Web实现)[图文+源码]

[2] 精品文档和工具下载:
计算机网络通讯协议关系图(中文珍藏版)[附件下载]
史上最全即时通讯软件简史(精编大图版)[附件下载]
基于RTMP协议的流媒体技术的原理与应用(技术论文)[附件下载]
独家发布《TCP/IP详解 卷1:协议》CHM版 [附件下载]
良心分享:WebRTC 零基础开发者教程(中文)[附件下载]
MQTT协议手册(中文翻译版)[附件下载]
经典书籍《UNIX网络编程》最全下载(卷1+卷2、中文版+英文版)[附件下载]
音视频开发理论入门书籍之《视频技术手册(第5版)》[附件下载]
国际电联H.264视频编码标准官方技术手册(中文版)[附件下载]
Apache MINA2.0 开发指南(中文版)[附件下载]
网络通讯数据抓包和分析工具 Wireshark 使用教程(中文) [附件下载]
最新收集NAT穿越(p2p打洞)免费STUN服务器列表 [附件下载]
高性能网络编程经典:《The C10K problem(英文)》[附件下载]
即时通讯系统的原理、技术和应用(技术论文)[附件下载]
技术论文:微信对网络影响的技术试验及分析[附件下载]
华为内部3G网络资料: WCDMA系统原理培训手册[附件下载]
网络测试:Android版多路ping命令工具EnterprisePing[附件下载]
Android反编译利器APKDB:没有美工的日子里继续坚强的撸
一款用于P2P开发的NAT类型检测工具 [附件下载]
两款增强型Ping工具:持续统计、图形化展式网络状况 [附件下载]

[3] 精选视频、演讲PPT下载:
QQ空间移动端10亿级视频播放技术优化揭秘(视频+PPT)[附件下载]
RTC实时互联网2017年度大会精选演讲PPT [附件下载]
微信分享开源IM网络层组件库Mars的技术实现(视频+PPT)[附件下载]
微服务理念在微信海量用户后台架构中的实践(视频+PPT)[附件下载]
移动端IM开发和构建中的技术难点实践分享(视频+PPT)[附件下载]
网易云信的高品质即时通讯技术实践之路(视频+PPT)[附件下载]
腾讯音视频实验室:直面音视频质量评估之痛(视频+PPT)[附件下载]
腾讯QQ1.4亿在线用户的技术挑战和架构演进之路PPT[附件下载]
微信朋友圈海量技术之道PPT[附件下载]
手机淘宝消息推送系统的架构与实践(音频+PPT)[附件下载]
如何进行实时音视频的质量评估与监控(视频+PPT)[附件下载]
Go语言构建高并发消息推送系统实践PPT(来自360公司)[附件下载]
网易IM云千万级并发消息处理能力的架构设计与实践PPT [附件下载]
手机QQ的海量用户移动化实践分享(视频+PPT)[附件下载]
钉钉——基于IM技术的新一代企业OA平台的技术挑战(视频+PPT)[附件下载]
微信技术总监谈架构:微信之道——大道至简(PPT讲稿)[附件下载]
Netty的架构剖析及应用案例介绍(视频+PPT)[附件下载]
声网架构师谈实时音视频云的实现难点(视频采访)
滴滴打车架构演变及应用实践(PPT讲稿)[附件下载]
微信海量用户背后的后台系统存储架构(视频+PPT)[附件下载]
在线音视频直播室服务端架构最佳实践(视频+PPT)[附件下载]
从0到1:万人在线的实时音视频直播技术实践分享(视频+PPT)[附件下载]
微信移动端应对弱网络情况的探索和实践PPT[附件下载]
Android版微信从300KB到30MB的技术演进(PPT讲稿)[附件下载]

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:聊天界面
上一篇:QQ空间移动端10亿级视频播放技术优化揭秘(视频+PPT) [附件下载]下一篇:Java NIO基础视频教程、MINA视频教程、Netty快速入门视频 [网盘下载]

本帖已收录至以下技术专辑

推荐方案
评论 5
学习一下 谢谢楼主!
签名: ········
支持一下
正需要,不知道合不合适
引用:shenjf325 发表于 2019-07-05 13:52
正需要,不知道合不合适

试试
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部