首页 > 其他分享 >Android学习笔记(五四):通知Notification(上)

Android学习笔记(五四):通知Notification(上)

时间:2023-04-09 13:02:14浏览次数:40  
标签:count 五四 Notification myNotify 通知 new Android TextView


Android学习笔记(五四):通知Notification(上)_Android

运行在后台的Service,需要某种方式来通知用户,例如通知用户来电,通知有新的消息。这类的通知显示在status bar上,还可以带有硬件的提醒,例如振动、LED灯闪,播放声音等等。在Android中,可以通过NotificationManager来发起一个通知。

我们先看一个简单的例子,如有图所示。界面很简单,两个大button,上面是出发通知,下面的是取消通知。触发通知后,状态栏显示图标和通知摘要(ticker,股市的自动收录机),几秒后只剩下图片,下拉状态栏,这以TextView的方式显示内容的标题title和文本。点击通知后,跳到某个activity中。

创建点击通知后出发的activity,采用简单方式,使用TextView方式

public class NotifyMessage extends Activity{  
   
     protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState); 
        TextView t = new TextView(this);  
         t..setText("This is the message!");
         setContentView(t); 
     } 

 }

下面是通知的处理程序

public class NotifyTest extends Activity{ 
     private NotificationManager mgr = null;//通过通知管理器来实现通知操作
    int count = 0; //有时service会发出多条通知,我们用一个计数器来模拟不同的通知
    private static final int NOTIFY_ME_ID=1337;  //通知管理器通过通知ID来标识不同的通知,创建和删除通知是需要提供通知号。 
     
     protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState); 
         setContentView(R.layout.notify_test);  
         //步骤1:在Android进行通知处理,首先需要重系统哪里获得通知管理器NotificationManager,它是一个系统Service。 
         mgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
     } 
     
    /*按上面button,出发notifyMe( ) */ 
     public void notifyMe(View v){  
         count ++; //这是通知的序列号,每按一次button,模拟一条新的通知 
        //步骤2:创建一个PendingIntent,和Intent类似,不同的是由于不是马上调用,需要在下拉状态条是出发的activity,所以采用的是PendingIntent        PendingIntent i = PendingIntent.getActivity(this, 0, new Intent(this,NotifyMessage.class), 0);
         //步骤3:通过Notification.Builder来创建通知,注意这是在API Level 11之后才支持,如果要兼容Android 2.x的版本,可以看后面注释内的代码
         Notification myNotify = new Notification.Builder(this)
                                 .setSmallIcon(R.drawable.note)  //设置状态栏中的小图片,尺寸一般建议在24×24,这个图片同样也是在下拉状态栏中所显示,如果在那里需要更换更大的图片,可以使用setLargeIcon(Bitmap icon)
                                .setTicker("Ticker:"+count)//设置在status bar上显示的提示文字
                                 .setContentTitle("Title:" + count)//设置在下拉status bar后Activity,本例子中的NotififyMessage的TextView中显示的标题
                                 .setContentText("Notification Text" + count)//TextView中显示的详细内容
                                 .setContentIntent(i)  //关联PendingIntent 
                                 .setNumber(count)  //在TextView的右方显示的数字,可放大图片看,在最右侧。这个number同时也起到一个序列号的左右,如果多个触发多个通知(同一ID),可以指定显示哪一个。
                                .build();  //需要注意build()是在API level 16增加的,可以使用 getNotificatin()来替代
      /* 下面需兼容Android 2.x版本是的处理方式 
       Notification myNotify=new Notification(R.drawable.note, "Ticker:" + count,  System.currentTimeMillis());
         myNotify.setLatestEventInfo(this, "Notification Title",  "This is the notification message", i);
         myNotify.number = count; */  
          
        myNotify.flags |= Notification.FLAG_AUTO_CANCEL;  //FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。 
        mgr.notify(NOTIFY_ME_ID ,myNotify);//步骤4:通过通知管理器来发起通知。如果id不同,则每click,在status哪里增加一个提示
    } 
     
     /* 按下面的button,触发消除通知  */ 
     public void notifyClear(View v){  
         mgr.cancel( NOTIFY_ME_ID );     }    

 }

如果通知还需要硬件方面的提醒,例如振动,可如下处理

note.setVibrate(new long[] {500L, 200L, 200L, 500L})
//note.vibrate=new long[] {500L, 200L, 200L, 500L};

Notification.Builder提供了setLights( ),setSound( )等方法,还有其他很多等等,具体可以根据自己的需求在参考中查找。


标签:count,五四,Notification,myNotify,通知,new,Android,TextView
From: https://blog.51cto.com/u_9877302/6178777

相关文章

  • Android学习笔记(五三):服务Service(下)- Remote Service
    之前所谈的Service属于LocalService,即Service和Client在同一进程内(即同一application内),Service的生命周期服从进程的生命周期。在实际应用上,有时希望Service作为后台服务,不仅被同一进程内的activity使用,也可被其他进程所使用,针对这种情况,需要采用bindService,也就是RemoteService......
  • Android学习笔记(四九):通过Content Provider访问数据
    在上次笔记中,我们编写了自己的Provider,这次笔记,我们将通过ContentProvider的Uri接口对数据进行访问,重写Android学习笔记(四二)中例子。在这里我们不在充分描述相关UI如何编写,可以到笔记(四二)中详细查看,重点讲述如何实现数据的访问。读取信息读取信息方式,在笔记(四七)中已经介绍,代码如下......
  • Android学习笔记(四八):提供自己的Content Provider
    在上一次的学习中,采用了原生的内容提供者Contact,Contact有多层映射关系,比较复杂,并非作为小例子的好选择,在本次学习中,我们将学习如何建立ContentProvider,并通过Uri进行增删改查。如果应用的数据只需自己使用,并不需要contentprovider,相反避免这样做,可直接访问数据;但是若希望数据可......
  • 小故事:开发者对Android权限的看法
    Wei:投诉一下,App的log.txt放在系统根目录下,这比较过分某L:原来还没改过来……去年就反映过这个问题了。Wei:升级App后,我向其他人发短信,腾讯手机管家报App要读取短信。为什么要监听发短信?可能应为某些功能,要监听来自某号的特殊短信,但为何要监听发送短信?某登:那个流量与内容监控的项目,是......
  • Pro Android学习笔记(四六):Dialog(3):对话框弹对话框
    提示框的按钮Help,将触发弹出新的帮助提示框。帮助提示框的实现帮助提示框的实现很简单,利用重写onCreateView()的方式,点击按钮是执行dismiss(),关闭对话框即可。代码不在此重复。dialogfragment的关闭有两种方式,一种是在dialogfragment中直接执行dismiss(),我们来看看DialogFragmen......
  • Pro Android学习笔记(四五):Dialog(2):DialogFragment
    DialogFragment的实例newInstance()已经在上一次学习笔记中实现。我们创建dialog的UI,可以通过重写DialogFragment的两个函数当中的一个来实现,这两个函数是onCreateView()和onCreateDialog(),前者返回view,后者返回dialog,如同通过AlertDialog.Builder构造一样。重写onCreateView()重写......
  • Pro Android学习笔记(四四):Dialog(1):触发Dialog
    Android提供alert、prompt、pick-list,单选、多选,progress、time-picker和date-picker对话框,并提供自定义的dialog。在Android3.0后,dialog基于fragment,并对之前版本提供兼容支持库,也就是说对于开发者而言,dialog是基于DialogFragment的,但此时需要在应用中加入相关的兼容库。和Window......
  • Pro Android学习笔记(二六):用户界面和控制(14):RelativeLayout
    相对布局:RelativeLayoutRelativeLayout也是非常常用的布局,能够精确对控件的位置进行网格对齐,可以设置在控件与其他控件的相对位置,以及控件在容器中的位置。缺省控件的位置为最上面还最左边。下面结合一个例子来进行解说。<?xmlversinotallow="1.0"encoding="utf-8"?><Relativ......
  • Android遇到内存泄漏和性能优化,需要采取以下措施
    内存泄漏:a.使用内存分析工具,如AndroidStudio的MemoryProfiler或LeakCanary,找出内存泄漏的位置,并修复代码。b.避免在Activity或Fragment中使用静态变量或单例模式,因为它们可能会持有对Activity或Fragment的引用,并导致内存泄漏。c.及时释放不再使用的资源,如关闭文件、释放......
  • Mac M1安装android sdk
    我这边是MacBookproM1芯片的电脑,需要安装androidsdk我在网上找了一圈,没有找到合适的sdk,要么是版本太老,要么是其他原因,后来我直接通过我的idea中进行下载,idea中搜索androidsdk即可下载edit进行安装,之后等待,好了之后进入此路径中,发现adb--version正常了主题你如果在网......