• Android应用开发学习之状态栏通知


    作者:刘昊昱 

    博客:http://blog.csdn.net/liuhaoyutz

     

    状态栏通知涉及到两个类,一是Notification,它代表一个通知;另一个是NotificationManager,它是用于发送Notification的系统服务。

    使用状态栏通知一般有4个步骤:

    1、  通过getSystemService()方法获取NotificationManager服务。

    2、  创建一个Notification对象,并为其设置各种属性。

    3、  Notification对象设置事件信息。

    4、  通过NotificationManager类的notify()方法将通知发送到状态栏。

    下面我们来看一个例子,其运行效果如下所示:

    主布局文件main.xml只是放置两个按钮,其内容如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <Button
            android:id="@+id/button1"
            android:text="发送消息"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
        <Button
            android:id="@+id/button2"
            android:text="清空消息"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </LinearLayout>


    下面看主Activity文件,其内容如下所示:

    package com.liuhaoyu;
    
    import android.app.Activity;
    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class MainActivity extends Activity {
    	final int NOTIFYID_1 = 123;	//第一个通知的ID
    	final int NOTIFYID_2 = 124;	//第二个通知的ID
    	
    	
        /** Called when the activity is first created. */	
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            final NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            
            Button button1 = (Button) findViewById(R.id.button1);
            button1.setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View v) {
    
    				Notification notify = new Notification();
    				notify.icon = R.drawable.image01;
    				notify.tickerText = "有新通知啦!";
    				notify.when = System.currentTimeMillis();
    				notify.defaults = Notification.DEFAULT_ALL;
    				notify.setLatestEventInfo(MainActivity.this, "通知1", "周六下午5点打篮球", null);
    				notificationManager.notify(NOTIFYID_1, notify);
    
    				Notification notify1 = new Notification(R.drawable.image01,	"哈哈,又有新通知了", System.currentTimeMillis());
    				notify1.flags|=Notification.FLAG_AUTO_CANCEL;
    				Intent intent=new Intent(MainActivity.this,ContentActivity.class);
    				PendingIntent pendingIntent=PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
    				notify1.setLatestEventInfo(MainActivity.this, "通知2",
    						"点击查看详情", pendingIntent);
    				notificationManager.notify(NOTIFYID_2, notify1);
    			}
    		});
            
            Button button2 = (Button) findViewById(R.id.button2);
    		button2.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    //				notificationManager.cancel(NOTIFYID_1);	//清除ID号为常量NOTIFYID_1的通知
    				notificationManager.cancelAll();	//清除全部通知
    
    			}
    		});
        }
    }


    当点击第一个按钮时,发送两个通知,第一个直接显示通知内容,第二个通过启动另外一个Activity ContentActivity来显示通知内容。

    当点击第二个按钮时,清空所有通知,也可以删除指定ID号的通知。

    因为第一个通知设置使用默认声音、默认振动及默认闪光灯,即程序需要访问系统闪光灯资源和振动器,所以我们需要在AndroidManifest.xml文件中声明使用权限,加上如下语句:

        <uses-permission android:name="android.permission.FLASHLIGHT"/>
        <uses-permission android:name="android.permission.VIBRATE"/>


    因为第二个通知要启动另外一个Activity来显示通知内容,所以我们也要在AndroidManifest.xml文件中声明这个Activity,加入如下语句:

            <activity
                android:label="通知"
                android:name=".ContentActivity"
                android:theme="@android:style/Theme.Dialog" />


    通知2调用的活动ContentActivity比较简单,仅仅是显示一条通知,但注意我们通过在AndroidManifest.xml中的android:theme="@android:style/Theme.Dialog"指定它为对话框的形式。该活动实现如下:

    package com.liuhaoyu;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    public class ContentActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.content);
    	}
    
    }
    


    其布局文件内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="周日下午5点打羽毛球"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    
    </LinearLayout>


  • 相关阅读:
    如何根据当前日期生成一张表
    如何使用Navicat 创建一个SqlServer定时任务
    python接口自动化-post请求2
    python接口自动化-post请求1
    python接口自动化-get请求
    测试通过与失败的标准
    需求规格说明书(SRS)特点
    测试用例设计方法
    系统测试知识
    jenkins之Job建立-运行 git 脚本
  • 原文地址:https://www.cnblogs.com/riskyer/p/3241391.html
Copyright © 2020-2023  润新知