自定义通知与系统通知的学习

自定义通知与系统通知的学习

通知这块比较简单,代码不多
[img]
自定义通知与系统通知的学习
[/img]

工程结构图:
[img]
自定义通知与系统通知的学习
[/img]

NotificationDemoActivity:
package com.amaker.notification;

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;

/**  
 * @Title: NotificationDemoActivity.java
 * @Package com.amaker.notification
 * @Description: 通知控制类
 * @author ZZL
 */
public class NotificationDemoActivity extends Activity {
	
	private Button clearBtn ;
	private NotificationManager manager ;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
    }
    
    /**
     * 初始化方法实现
     */
    private void init(){
    	
    	//步骤一:取得系统服务
    	manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    	
    	//步骤二:
    	Notification notification = new Notification(R.drawable.notification,
    			"收到小马通知测试", System.currentTimeMillis());
    	
    	/**
    	 * 小马在这个地方写下为什么要在用到通知的时候要创建PendingIntent对象,是因为
    	 * Notification可以与应用程序脱离,即便应用程序关闭,Notification仍然
    	 * 会显示在状态栏中,当应用程序再次启动后,又可以重新控制这些Nofication消息,
    	 * 如清除或替换它们,因为才创建的此对象,更神奇的是这个对象由安卓系统本身维护哦,所以
    	 * 在应用关闭后这个对象是不会被翻译掉的
    	 */
    	//步骤三:
    	Intent intent = new Intent();
    	intent.putExtra("Msg", "这是从Notification传递过来的信息");
    	intent.setClass(this, NotificationDemoTest.class);
    	PendingIntent contentIntent = PendingIntent.getActivity(this, 0,intent, 0);
    	
    	//步骤四:setLatestEventInfo通过标准的方式将我们的通知设置到指定的View中
    	notification.setLatestEventInfo(this, "通知测试哦", "这是通知的主内容", contentIntent);
    	
    	//写下面这句话的时候大家注意下不要忘了加震动权限,不然没法调用硬件
    	//notification.defaults = Notification.DEFAULT_VIBRATE;
    	//下面这句是把当前的通知设置永久保存的Notification,好暴力呀,吼吼
    	//notification.flags = Notification.FLAG_NO_CLEAR
    	//下面这句是指:如果要让其它的软件检测到永久保存的通知时可以这样写
    	//Notification.flags = Nofication.FLAG_ONGOING_EVENT;
    	/**
    	 * 在这一步需要指定标识Notification的唯一ID,这个ID必须相对于同一个
    	 * NoficationManager对象是唯一的,否则就会覆盖相同ID的Notification
    	 */
    	//步骤五:
    	manager.notify(R.drawable.notification, notification);
    	
    	clearBtn = (Button)findViewById(R.id.button1);
    	clearBtn.setOnClickListener(new OnClickListener() {
    		
    		@Override
    		public void onClick(View v) {
    			manager.cancel(R.drawable.notification);
    			//清除所有通知:
    			//manager.cancelAll();
    		}
    	});
    	
    }
    
}


NotificationDemoTest
package com.amaker.notification;

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;
import android.widget.RemoteViews;
import android.widget.Toast;

/**  
* @Title: NotificationDemoTest.java
* @Package com.xiaoma.www.demo
* @Description: 接收并弹出通知传递过来的信息
* @author MZH
*/
public class NotificationDemoTest extends Activity {
	//声明变量
	private Button selfBtn;
	
	private NotificationManager manager ;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.maintwo);
		init();
	}
	
	/**
	 * 初始化方法实现
	 */
	private void init(){
		Intent i = this.getIntent();
		String msg = i.getStringExtra("Msg");
		if(!"".equals(msg)){
			Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
		}else{
			Toast.makeText(this, "未接收到任何短信", Toast.LENGTH_SHORT).show();
		}
		
		selfBtn = (Button)findViewById(R.id.button2);
		selfBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				sendNotification();
			}
		});
		
	}
	private void sendNotification(){
		/**
		 * 下面还是五个步骤,呵呵跟前面那个Activity是一样的,只是通知布局不同咯,用RemoteViews加载
		 */
		manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
		Notification notification = new Notification(R.drawable.ic_launcher,
				"这是自定义通知的信息哦", System.currentTimeMillis());
		PendingIntent pendingIntent = PendingIntent.getActivity(this, 1, getIntent(), 1);
		/**
		 * RemoteViews这个类的官方文档解释为:
		 *   很直接很简单的讲就是:从我们自己的XML文件中加载一个VIEW到通知中   
		 */
		RemoteViews rViews = new RemoteViews(getPackageName(), R.layout.notification);
		rViews.setTextViewText(R.id.textView, "更新自定义内容");
		notification.contentView = rViews;
		notification.contentIntent = pendingIntent;
		//notification.setLatestEventInfo(this, "这是通知的标题", "这是通知的正文", pendingIntent);
		manager.notify(1, notification);
		
	}
	

}


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"
    android:background="@drawable/background" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:text="清队当前通知" />

</LinearLayout>


maintwo.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" 
    android:background="@drawable/background"
    >

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点我查看自定义通知"
        android:textColor="#000000" />

</LinearLayout>


notification.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" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="自定义内容"
        android:textColor="#F00"
        android:textSize="20px"
        android:gravity="center"
        android:id="@+id/textView"
         />

    <ImageButton
        android:id="@+id/imageBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src="@drawable/notification"/>

</LinearLayout>


配置文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.amaker.notification"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/xiaoma"
        android:label="@string/app_name" >
        <activity
            android:name=".NotificationDemoActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".NotificationDemoTest"></activity>
    </application>

</manifest>

你可能感兴趣的:(notification)