Android通知之Notification的用法剖析
来源:互联网 发布:零基础学java pdf 编辑:程序博客网 时间:2024/06/08 15:39
一)创建一个简单的Notification,根据谷歌官方介绍的方法,我们利用V4包里的NotificationCompat.Builder的方法来创建最好,也非常简单,主要有几个参数,setSmallIcon()是通知左边的小图标,setContentTitle()是通知的标题,setContentText()是通知的内容,一般标题的字体比内容要大一些。在api11以上也可以使用Notification.Builder来创建.
设置完参数后需要开启NotificationManager,获取它的实例通过
getSystemService(Context.NOTIFICATION_SERVICE)
Builder.build()返回的是一个Notification,Notifictionmanager的notify()方法要传入两个参数,第二个参数就是这个Notification类型。
这样一个通知就创建好了,点击按钮后拉开标题栏,会看到效果
public class MainActivity extends Activity {private static int id=1200;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.button).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) { NotificationCompat.Builder builder=new NotificationCompat.Builder(MainActivity.this ) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("啊哦!你有一条新消息") .setContentText("你已经成功创建一条通知"); NotificationManager mNotificationManager=(NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE); mNotificationManager.notify(id, builder.build()); }});}}
notify()的第一个参数是id,可以用来动态的改变通知的内容,比如我们设置一个count,用来记录点击的次数,每点击一次通知栏的count也会相应的改变
private static int count=0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.button).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {count++; NotificationCompat.Builder builder=new NotificationCompat.Builder(MainActivity.this ) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("啊哦!你有"+count+"条新消息") .setContentText("你已经成功创建一条通知"); NotificationManager mNotificationManager=(NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE); // mId allows you to update the notification later on mNotificationManager.notify(id, builder.build()); }});}比如我点击按钮五次,通知会是这样的:
二)通知显示出来之后,我们需要给其设置点击事件,这里牵涉到PendingIntent的使用。
当从Notification开启一个Activity的时候,一般有两种情况,第一种情况是这个活动新开了一个活动栈,不占用应用的内存,按下返回键会直接返回到Home界面;第二种情况是给PendingIntent添加返回栈,在AndroidManifest文件里指明其父活动,当按下返回键的时候,带有返回栈的PendingIntent会复制原来活动正常的返回行为
1)开返回栈
先给目标活动注册,注意添加父活动,
</intent-filter> </activity> <activity android:name="com.example.notification.ResultActivity" android:parentActivityName=".MainActivity"> </activity>
如果是android4.0.3之前的还要加上
<meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity"/>然后在点击按钮里,这里在api16以下的要使用v4包里的TaskStackBuilder,我设置的最小sdk是14,所以使用的v4包。
Intent intent=new Intent(MainActivity.this,ResultActivity.class);android.support.v4.app.TaskStackBuilder stackBuilder=android.support.v4.app.TaskStackBuilder.create(MainActivity.this);stackBuilder.addParentStack(ResultActivity.class);//添加返回栈stackBuilder.addNextIntent(intent);//把intent添加到返回栈的栈顶PendingIntent pd=stackBuilder.getPendingIntent(0, PendingIntent.FLAG_CANCEL_CURRENT); NotificationCompat.Builder builder=new NotificationCompat.Builder(MainActivity.this ) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("啊哦!你有"+count+"条新消息") .setContentText("你已经成功创建一条通知") .setContentIntent(pd); NotificationManager mNotificationManager=(NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE); // mId allows you to update the notification later on mNotificationManager.notify(id, builder.build());
2)不加返回栈,直接在活动里写PendingIntent就可以
NotificationCompat.Builder builder=new NotificationCompat.Builder(MainActivity.this ) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("啊哦!你有"+count+"条新消息") .setContentText("你已经成功创建一条通知"); Intent intent=new Intent(MainActivity.this,ResultActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);PendingIntent pd=PendingIntent.getActivity(MainActivity.this, 0, intent,PendingIntent.FLAG_CANCEL_CURRENT);builder.setContentIntent(pd); NotificationManager mNotificationManager=(NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE); // mId allows you to update the notification later on mNotificationManager.notify(id, builder.build());
三)给通知加上进度条
private NotificationManager mNotificationManager;private NotificationCompat.Builder builder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.button).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {count++;mNotificationManager=(NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE); builder=new NotificationCompat.Builder(MainActivity.this ) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("啊哦!你有"+count+"条新消息") .setContentText("你已经成功创建一条通知"); new Thread( new Runnable() { @Override public void run() { int incr; // Do the "lengthy" operation 20 times for (incr = 0; incr <= 100; incr+=5) { // Sets the progress indicator to a max value, the // current completion percentage, and "determinate" // state builder.setProgress(100, incr, false); // Displays the progress bar for the first time. mNotificationManager.notify(0, builder.build()); // Sleeps the thread, simulating an operation // that takes time try { // Sleep for 5 seconds Thread.sleep(1000); } catch (InterruptedException e) { } } // When the loop is finished, updates the notification builder.setContentText("Download complete") // Removes the progress bar .setProgress(0,0,false); mNotificationManager.notify(id, builder.build()); } } // Starts the thread by calling the run() method in its Runnable ).start();}});}
- Android通知之Notification的用法剖析
- Android通知之Notification的多种用法
- Android之Notification(通知)的用法
- Android之Notification(一):通知的基本用法
- Android通知Notification用法
- Android通知Notification全面剖析
- Android通知Notification全面剖析
- Android通知Notification全面剖析
- android 通知Notification的基本用法
- Android通知Notification的功能与用法
- Android中Notification通知的用法
- android之Notification通知
- android之Notification通知
- android之Notification通知
- android之Notification通知
- android之Notification通知
- android之Notification通知
- Android之Notification通知
- java杂记
- oracle导出、导入dmp文件
- UVA4260Fortune Card Game【dp】
- 第10、11周-程序阅读补充(1)
- 学习JavaScript应该尽早知道的几个技巧
- Android通知之Notification的用法剖析
- tomcat性能调优
- SiteWhere如何连接MongoDB
- UVALive 6277 - Addictive Bubbles (模拟)
- 获取数组的最小值
- 决策树二
- 1004
- Pascal's Triangle II
- 【一天一道LeetCode】#51. N-Queens