当前位置:网站首页 > 横幅广告 > 正文

android锁屏状态下点亮屏幕并弹手机点亮屏幕弹屏广告窗提醒

作者:admin发布时间:2021-09-04分类:横幅广告浏览:评论:9


导读:然后在中对该加上如下属性。控制在不在列表中显示。true时不显示显示默认。这个其实就是我们需要的弹窗类似于上图中的弹出的QQ消息只不过是把设置为不显示标题以及背景设置为屏幕桌面...

android锁屏状态下点亮屏幕并弹窗提醒

然后在中对该加上如下属性。

控制在不在列表中显示。true时不显示显示默认。

这个其实就是我们需要的弹窗类似于上图中的弹出的QQ消息只不过是把设置为不显示标题以及背景设置为屏幕桌面壁纸或者设置成透明的都行然后中间的View就自己按需要来写。把Activity的背景设置为屏幕桌面壁纸只需要在AndroidManifest.xml中对应的Activity的标签下的theme属性设置为android:style/Theme.Wallpaper.NoTitleBar就可以。

注意设置了上面这个theme属性后这个Activity要继承Activity继承AppCompatActivity会报错。

二、新建一个广播并在广播中启动弹窗Activity

重写onReceiver方法并在方法中写上如下语句。收到需要的广播就类似于QQ收到新消息然后判断是否需要弹出。

OverridepublicvoidonReceive(Contextcontext,Intentintent){Log.d(TAG,onReceive:收到广播Log.d(TAG,intent.getAction());//拿到传来过来数据Stringmsgintent.getStringExtra(msg//拿到锁屏管理者KeyguardManagerkm(KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE);if(km.isKeyguardLocked()){//为true就是锁屏状态下//启动ActivityIntentalarmIntentnewIntent(context,AlarmHandlerActivity.class);//携带数据alarmIntent.putExtra(msg,msg);//activity需要新的任务栈alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(alarmIntent);}}

在广播中启动Activity的context可能不是Activity对象所以需要添加NEW_TASK的标志否则启动时可能会报错

别忘了在AndroidManifest.xml中声明receiver,并添加过滤器用来过滤广播这接受我们需要的。

receiverandroid:name.MyReceiverandroid:enabledtrueandroid:exportedtrueintent-filterandroid:priority1000actionandroid:namecom.fu//intent-filter/receiver

三、添加权限

在AndroidManifest.xml中添加权限。

uses-permissionandroid:nameandroid.permission.DISABLE_KEYGUARD/uses-permissionandroid:nameandroid.permission.WAKE_LOCK/

其实以上的差不多就已经实现了我们需要的功能。下面为了方便测试演示下过加的其他的步骤。

四、模拟演示

1.新建一个Service并在里面实现延迟发送广播

OverridepublicvoidonCreate(){Log.d(TAG,onCreate:mHandler.postDelayed(newRunnable(){Overridepublicvoidrun(){IntentintentnewIntent();intent.setAction(com.fuintent.putExtra(msg,新消息1MyService.this.sendBroadcast(intent);Log.d(TAG,第一次发送广播}},10000);mHandler.postDelayed(newRunnable(){Overridepublicvoidrun(){IntentintentnewIntent();intent.setAction(com.fuintent.putExtra(msg,新消息2MyService.this.sendBroadcast(intent);Log.d(TAG,第二次发送广播}},20000);}

上面代码是在service中的onCreate中延迟10发送一次广播延迟20秒又发送了一次广播目的是为了让手机出于锁屏界面下收到广播然后点亮屏幕弹出提示窗。

别忘了在AndroidManifest.xml中声明service

serviceandroid:name.MyServiceandroid:enabledtrueandroid:exportedtrue/

2.开启service

intentnewIntent(MainActivity.this,MyService.class);startService(intent);

3.锁屏等待亮屏弹窗

这是锁屏界面下的截图

五、补充说明

如果弹窗的Activity没有被销毁也就是说第一次亮屏有弹窗但我们没有去关闭它而是又按下了锁屏键这时第二次来消息的时候就会调用onNewIntent()方法那我们就重写onNewIntent()方法。

/**

*这个方法是当这个activity没有销毁的时候人为的按下锁屏键然后再启动这个Activity的时候会去调用

*

*paramintent*/OverrideprotectedvoidonNewIntent(Intentintent){Log.i(TAG,onNewIntent:调用PowerManagerpm(PowerManager)this.getSystemService(Context.POWER_SERVICE);if(!pm.isScreenOn()){Stringmsgintent.getStringExtra(msgtextview.setText(又收到消息:msg);//点亮屏幕PowerManager.WakeLockwlpm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP|PowerManager.SCREEN_BRIGHT_WAKE_LOCK,brightwl.acquire();wl.release();}}

弹窗activity的布局文件

?xmlversion1.0encodingutf-8?RelativeLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:contextcom.example.fu.notifydemo.AlarmHandlerActivityTextViewandroid:idid/textviewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_centerInParenttrueandroid:backgroundandroid:color/whiteandroid:text收到消息:android:textColorandroid:color/holo_red_darkandroid:textSize25sp//RelativeLayout

以上就是本人对锁屏状态下点亮屏幕并弹窗提醒一些初步理解如有错误的地方还望指正。

参考文献


已有9位网友发表了看法:

欢迎 发表评论:

横幅广告排行
最近发表
标签列表