篇一:Android-通知
android Notification 的使用
最近一直在研究 android ,并一边研究一边做应用。其中遇到了把程序通知常驻在
Notification 栏,并且不能被 clear 掉(就像android QQ一样)的问题。经过研究实现了其功能,现把 Notification 的使用总结如下:
Notification 的使用需要导入 3 个类
代码示例及说明
下面依次对每一段代码进行分析:
创建 NotificationManager,其中创建的 nm 对象负责“发出
”与“取消” Notification。 创建 Notification ,参数依次为:icon的资源
id,在状态栏上展示的滚动信息,时间。其中创建的 n 对象用来描述出现在系统通知栏的信息,之后我们将会看到会在 n 对象上设置点击此条通知发出的Intent。
设置 n.flags 为 Notification.FLAG_AUTO_CANCEL ,该标志表示当用户点击 Clear 之后,能够清除该通知。
?
创建一个Intent,该Intent使得当用户点击该通知后发出这个Intent
请注意,如果要以该Intent启动一个Activity,一定要设置
Intent.FLAG_ACTIVITY_NEW_TASK 标记。
Intent.FLAG_ACTIVITY_CLEAR_TOP :如果在当前Task中,有要启动的Activity,那么把该Acitivity之前的所有Activity都关掉,并把此Activity置前以避免创建Activity的实例 Intent.FLAG_ACTIVITY_NEW_TASK :系统会检查当前所有已创建的Task中是否有该要启动的Activity的Task,若有,则在该Task上创建Activity,若没有则新建具有该Activity属性的Task,并在该新建的Task上创建Activity。更多请参见 “ (转载)Android下Affinities和Task ”
PendingIntent 为Intent的包装,这里是启动Intent的描述,PendingIntent.getActivity 返回的PendingIntent表示,此PendingIntent实例中的Intent是用于启动 Activity 的Intent。PendingIntent.getActivity的参数依次为:Context,发送者的请求码(可以填0),用于系统发送的Intent,标志位。
其中 PendingIntent.FLAG_UPDATE_CURRENT 表示如果该描述的PendingIntent已存在,则改变已存在的PendingIntent的Extra数据为新的PendingIntent的Extra数据。 这里再简要说一下 Intent 与 PendingIntent 的区别:
Intent :意图,即告诉系统我要干什么,然后系统根据这个Intent做对应的事。如startActivity相当于发送消息,而Intent是消息的内容。
PendingIntent :包装Intent,Intent 是我们直接使用 startActivity , startService 或 sendBroadcast 启动某项工作的意图。而某些时候,我们并不能直接调用startActivity , startServide 或 sendBroadcast ,而是当程序或系统达到某一条件才发送Intent。如这里的Notification,当用户点击Notification之后,由系统发出一条Activity 的 Intent 。因此如果我们不用某种方法来告诉系统的话,系统是不知道是使用 startActivity ,startService 还是 sendBroadcast 来启动Intent 的(当然还有其他的“描述”),因此这里便需要PendingIntent。
设置显示在通知下拉框中的信息,参数依次为:Context,标题,内容,PendingIntent。 启动Notification,参数依次为:在你的程序中标识Notification的id值(用来区分同一程序中的不同Notifycation,如果程序中只有一个Notification那么这里随便你填什么都可以,不过类型必须要为int),要通知的Notification。
如何使自己的Notification像Android QQ一样能出现在 “正在运行的”栏目下面
其实很简单,只需设置Notification.flags = Notification.FLAG_ONGOING_EVENT;便可以了。
如何改变 Notification 在“正在运行的”栏目下面的布局
创建 RemoteViews 并赋给
Notification.contentView ,再把 PendingIntent 赋给 Notification.contentIntent 便可以了,如:
注意,如果使用了contentView,那么便不要使用Notification.setLatestEventInfo。如果setLatestEventInfo在赋给 Notification.contentView 的代码之后,那么contentView的效果将被覆盖,显示的便是 setLatestEventInfo 的效果;如果 setLatestEventInfo 在
Notification.contentView 的代码之前,那么显示的便是 Notification.contentView 的效果,也就是说不管你想要setLatestEventInfo 或 contentView 的自定义效果,请保证始终只有一句设置代码,因为在最后一句绑定的时候,之前的设置contentView或setLatestEventInfo的代码都是完全没有必要的。
1. package cn.com.chenzheng_java;
篇二:Android手机通知栏时间、日期、通知颜色修改教程
Android手机通知栏时间、日期、通知颜色修改教程
一、先修改时间颜色
时间颜色代码在/system/framework/severce.jar里面的classes.dex文件内,classes.dex必须先解包,也就是反翻译才能编辑。 具体步骤:
1、首先确保电脑上安装了JDK,就是JAVA的开发环境,在各软件站都能找到!
2、下载附件1:smali.rar并解压,这个是用来解包和打包classes.dex文件的。
3、从MS中将severce.jar文件提取出来,修改前记得备份,用RAR打开severce.jar,将classes.dex提取出
来,放在smali.rar解压后的文件夹内。
4、需要用CMD操作,smali.rar文件夹内的解包批处理好像不能用,只能用自己动手了。运行CMD,用CD命令进入smali文件夹,输入 java -jar baksmali.jar classes.dex -o classes,回车。稍等一会将完成解包,解包后文件夹内出现classes文件夹
5、找到这个文件
\classes\com\android\server\status\statusbaricon.smali
6、用记事本打开该文件找到 const V6, -0X100,修改为const v6, -0x1后保存,时间颜色由黑
色修改为白色。
7、修改完成后运行smali文件夹内的“打包.bat”会自动生成新的
classes.dex,替换回severce.jar内。
8、将services.jar拷贝到/system下,用Root Explorer更改权限,所有勾勾都要打上!要不无限重启。
9、将修改权限后的services.jar覆盖到手机上/system/framework/下,重启手机。
二、修改日期颜色
1、前4步跟修改时间颜色一样!
2、打开classes\com\android\server\status\,编辑
StatusBarService.smali,找到.line276,加入分割线内代码。 .line 276
const v7, 0x1020059
invoke-virtual ,
Lcom/android/server/status/StatusBarView;->findViewById(I)Landroid/view/View;
move-result-object v7
check-cast v7, Lcom/android/server/status/DateView;
---------------------------------------------------------------------------------------------------------------
const v8, -0x1
invoke-virtual , Landroid/widget/TextView;->setTextColor
------------
---------------------------------------------------------------------------------------------------3、日期已由黑色修改为白色了,运行smali文件夹内的“打包.bat”会自动生成新的classes.dex,替换回severce.jar内即可。
4、将services.jar拷贝到/system下,用Root Explorer更改权限,所有勾勾都要打上!要不无限重启。
5、将修改权限后的services.jar覆盖到手机上/system/framework/下,重启手机。
三、修改通知字体颜色,
通知字体颜色代码分别由/system/framework/framework-res.apk内的3个文件控制
1、拷贝framework-res.apk,用RAR解压,提取\res\layout文件夹下的
status_bar_latest_event_content.xml(第一处控制通知标题、第二处控制通知内容颜色
status_bar_expanded.xml(控制状态栏下面那一行字体,就是中国移动那一行)
status_bar.xml(控制状态栏上字体颜色)
2、用16进制文件编辑器(推荐用Uedit32)打开,搜索16进制的08 00 00 1C ,08 00 00 1C后面四位字符,比如00 00 00 FF(黑色)就是颜色代码
3、可以改为你需要的颜色,需要注意的是,四位代码的含义是Blue、Green、 Red、 Alpha,Alpha值为FF,一般不用动。将00 00 00 FF(黑色)改为FF FF FF FF(白色),
4、用RAR打开framework-res.apk文件,将修改后的文件拖回之。
5、将framework-res.apk拷贝到/system下,用Root Explorer更改权限,所有勾勾都要打上!要不无限重启.
6、将修改权限后的framework-res.apk覆盖到手机上
/system/framework/下,重启手机。
工具. 打包.rar(245 Bytes, 下载次数: 31)
解包.rar(247 Bytes, 下载次数: 26)
baksmali&smali.rar(2.66 MB, 下载次数: 413)
篇三:Android成长日记-Noification实现状态栏通知
Android成长日记-Noification实现状态栏通知
Notification可以作为状态栏的通知,实现这个效果需要使用NotificationManager实现控制类,才能实现对这个效果的显示 下面是实现状态栏显示效果的通知:
1. 首先在Layout建立两个Button,一个用于实现显示
Notification,一个用于取消Notification
2. 书写Java代码
private void sendNotification(){
Intent intent = new Intent(this,MainActivity.class);
PendingIntent pintent = PendingIntent.getActivity(this, 0, intent, 0);Builder builder = new Notification.Builder(this);
builder.setSmallIcon(R.drawable.ic_launcher);//设置图标
builder.setTicker("hello");//手机状态栏的提示;
builder.setWhen(System.currentTimeMillis());//设置时间
builder.setContentTitle("通知栏通知");//设置标题
builder.setContentText("我来自NotificationDemo");//设置通知内容builder.setContentIntent(pintent);//点击后的意图
// builder.setDefaults(Notification.DEFAULT_SOUND);//设置提示声音 // builder.setDefaults(Notification.DEFAULT_LIGHTS);//设置指示灯 // builder.setDefaults(Notification.DEFAULT_VIBRATE);//设置震动builder.setDefaults(Notification.DEFAULT_ALL);//设置震动Notification notification = builder.build();//4.1以上
//builder.getNotification();
manager.notify(notification_ID, notification);
}
Ps:
------------------------------------------------------------------------------------- 在创建前明确导入的包