A. android 6.0通知栏下拉动画缓慢的问题
最近在蔽锋开发中想要实现一个下拉通知栏的功能,但是在6.0上使用方法下拉,展开动画十分缓慢,刚好在Nova launcher中,也实现了下拉通知栏,而且在6.0上提示说获塌数取root权限,变通的解决这个问题,在酷安开发者群有朋友提到说可以在获取root权限后使用shell模拟触摸事件来实现这个方法,测试以后发现确实可行。
调用如下指团并首令模拟手势实现下拉:
adb shell input swipe 100 1 100 500 300 模拟滑动事件 在x 100 y 1的位置滑动到 x 100 y 500的位置 历时300毫秒
此时通知栏并不会完全展开,解决方法也非常简单,再模拟一次点击事件,点击刚刚没有完全展开的状态栏即可:
adb shell input tap 100 100 模拟点击事件,点击了一下x 100 y 100的位置
这样通知栏就完全展开了
B. oppo怎么关闭android系统通知栏
通知管理可以管理所有应用的通知权限,您可以自行选择各应用通知的展开方式。
1、前往设置 > 通知与状态栏 > 通知管理。
2、选择应用 > 开启或关闭允许通知,还可以在这敬手里选择来凳稿乱通知时在桌面图标上显示数字角标、圆点角标或无角标。
开启应用的通知权限后,应用的常规推送会集中展示在通知中心。
在解锁后的任意屏幕下,从屏幕顶部向下轻扫,即可看到通知中心的消枣档息。
若通知中心里有您不感兴趣的消息,您可以通过以下两种方式删除通知:1、向左/向右滑动单个通知,出现删除图标后,点击删除图标进行删除,或继续向左滑动直接删除。
2、点击通知中心右下角全部清除,将通知一次性全部删除。
本回答适用于OPPO所有机型。
C. Android通知栏前台服务
最常见的表现形式就是 音乐播放服务 ,应用程序后台运行时,用户可以通过通知栏,知道当前播放内容,并进行暂停、继续、切歌等相关操作。
以上就是前台服务的创建过程,念大相关注释已经很明白了,具体使用可以查看文末的Demo。
服务创建完毕,接下来就可以进行服务的启动了,启动前不要忘记在清单文件中进行前台服务权限的添加:
关于 前台服务 的介绍及使用就到这里了,相关使用已上传至 Github开发记录 ,欢迎点击查阅及Star,我也会继续补充其它有用的知识及例子在项目上。
用前台服务相比后台服务更不庆高源容易被系统杀死,可以起到比较长久的驻留。
在开发过程中,发现前台服务蓝牙扫描会被阻。系统提示start scan is blocked。这个是系统阻止了蓝牙设备的运行,只能在设置上放行。比如小米:设置->电誉态量和性能->应用配置-> 应用APP
D. Android通知栏详解
可以看到,Android通知栏默认是标题显示一行,内容显示一行,对于一行显示不完的,用省略号代替。
这是常见的通知栏的样式,不再赘述。
在不同的手机上,只设置builder.setSmallIcon(R.drawable.ic_launcher)表现可能不一致,在华为P9上不会显示大的icon,只会显示小的icon。但是在魅族上却显示了,显示的应该是应用的默认图标。
所以建议还是设置
与上面的显示多行文本类似,也是在Android4.1中官方推出的Notification.BigPictureStyle。
使用方式也相同
是因为在用户还没有划出通知栏的时候需要提醒用户收到通知,所以需要显示smallIcon。
E. android通知栏高度可以修改么
可以,修改 Android 状态栏高度:
配置文件:frameworks/base/core/res/res/values/dimens.xml
修改条目:
<resources>
<!-- The width that is used when creating thumbnails of applications. -->
<dimen name="thumbnail_width">0dp</dimen>
<!-- The height that is used when creating thumbnails of applications. -->
<dimen name="thumbnail_height">0dp</dimen>
<!-- The standard size (both width and height) of an application icon that
will be displayed in the app launcher and elsewhere. -->
<dimen name="app_icon_size">48dip</dimen>
<dimen name="toast_y_offset">64dip</dimen>
<!-- Height of the status bar -->
<dimen name="status_bar_height">38dip</dimen>
<!-- Height of the status bar -->
<dimen name="status_bar_icon_size">38dip</dimen>
<!-- Margin at the edge of the screen to ignore touch events for in the windowshade. -->
<dimen name="status_bar_edge_ignore">5dp</dimen>
<!-- Size of the fastscroll hint letter -->
<dimen name="fastscroll_overlay_size">104dp</dimen>
<!-- Width of the fastscroll thumb -->
<dimen name="fastscroll_thumb_width">64dp</dimen>
<!-- Height of the fastscroll thumb -->
<dimen name="fastscroll_thumb_height">52dp</dimen>
<!-- Default height of a key in the password keyboard -->
<dimen name="password_keyboard_key_height">56dip</dimen>
<!-- Default correction for the space key in the password keyboard -->
<dimen name="password_keyboard_spacebar_vertical_correction">4dip</dimen>
</resources>
F. [Android]展开/收起通知栏
需要权限:
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
收起通知栏(经测能用)
展开通知栏(未测试)
转自文章: 折叠与展开通知栏方法
G. Android 下拉通知栏时Activity的生命周期——重新理解onPause()
在某个APP中,发现下拉通知栏的时候,正在播放的视频会暂停,于是有点好奇这段操作是不是在生命周期中实现的。在网上众多关于Activity生命周期的讨论中,很多人认为 onPause() 和 onStop() 的区别就是“部分遮挡”和“全部遮挡”,那按照这个猜测来分析一下这个过程:
首先,通知栏下拉一点点,符合一般描述中“Activity被部分遮挡”—— onPause()
然后,通知栏完全落下之后,“Activity被全部遮挡”—— onStop()
于是自己写了一个实例来验证:
启动APP时,毫无疑问,调用了 onCreate() → onStart() → onResume() ;
完全下拉通知栏,然后上拉通知栏,发现没有日志打印,说明 下拉通知栏对Activity的生命周期没有影响 。
经过测试不难发现,在Activity中弹出AlertDialog、Toast时,Activity的 onPause() 并没有调用;笔者还尝试在MIUI系统中唤醒小爱同学,发现 onPause() 仍然没有被调用。
但是在以下特殊的情况下, onPause() 会被调用:
跑去看文档发现了如下信息:
发现了 onPause() 和Activity的奇妙联系,就不难理解之前为什么没有被调用的问题了。
查看AlertDialog和Toast的源码,可以发现它们显示的原理,都是通过 WindowManager.addView() 来显示的。也就是说,AlertDialog和Toast可以看做是当前Activity的一部分View,当然也不会对Activity的生命周期构成影响。
因此, onPause() 是否调用的关键就是,是否有另一个Activity参与进来了。
而网上流传甚广的 onPause() 和 onStop() 调用中提到的“遮挡”,应该修正为 “被Activity遮挡”
至于官方文档中提到的, onPause() 之后会调用 onStop() 或者 onResume() ,前者很好理解,一般的退出、新启动一个全屏Activity、锁屏、返回HOME等操作都是这种情况;至于后者,笔者能想到的情况就是,弹出部分遮挡的Activity类型的对话框,然后按返回键。
H. android 怎么让通知栏点击后不消失 但可以被按钮清除
android 让通知栏点击后不消失 但可以被按钮清除,可以这样做:
APP发送通知时,通知需要添加flag:
Notification notification;
notification.flags |= Notification.FLAG_ONGOING_EVENT;
或者
notification.flags |= Notification.FLAG_NO_CLEAR;
PendingIntent.FLAG_CANCEL_CURRENT;
PendingIntent.FLAG_NO_CREATE;
PendingIntent.FLAG_ONE_SHOT;
PendingIntent.FLAG_UPDATE_CURRENT;
参考资料:http://blog.csdn.net/hknock/article/details/8465410
I. android 自定义通知栏
Notification 参数使用 参考:
http://www.cnblogs.com/kexing/p/8371051.html
自定义通知栏
仅支持FrameLayout、LinearLayout、RelativeLayout三种布局控件
AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper这些显示控件
否则会引起ClassNotFoundException异常。
流程:点击通知栏 发送广播 app接收广播做相应处理:
为通知栏绑定广播事件:
1.FLAG_CANCEL_CURRENT:如果AlarmManager管理的PendingIntent已经存在,那么将会取消当前的PendingIntent,从而创建一个新的PendingIntent.
2.FLAG_UPDATE_CURRENT:如果AlarmManager管理的PendingIntent已经存在,让新的Intent更新之前Intent对象数据,例如更新Intent中的Extras,另外,我们也可以在PendingIntent的原进程中调用PendingIntent的cancel ()把其从系统中移除掉
3.FLAG_NO_CREATE:如果AlarmManager管理的PendingIntent已经存在,那么将不进行任何操作,直接返回已经.
4.FLAG_ONE_SHOT:该PendingIntent只作用一次.在该PendingIntent对象通过send()方法触发过后,PendingIntent将自动调用cancel()进行销毁,那么如果你再调用send()方法的话,系统将会返回一个SendIntentException.
添加广播接收:
AndroidManifest: