`

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

阅读更多
自定义通知与系统通知的学习

通知这块比较简单,代码不多
[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>
  • 大小: 24 KB
  • 大小: 31 KB
分享到:
评论

相关推荐

    Notification系统通知和自定义通知小列子

    在Android开发中,Notification系统通知是用户界面与用户交互的重要方式之一,用于在状态栏显示消息,即使应用在后台运行也能...通过学习和实践这些示例,你将能够更好地理解和运用Notification系统通知和自定义通知。

    系统通知和自定义的通知

    系统通知是Android提供的原生功能,而自定义通知则是开发者为了提供更加丰富和个性化的用户体验而进行的扩展。下面我们将详细探讨“系统通知”和“自定义的通知”。 首先,系统通知是Android API提供的一种服务,...

    notification-Android带按钮自定义通知栏

    总结来说,Android的通知系统提供了强大的灵活性,让开发者能够创建各种类型的通知,包括带有按钮的自定义通知。通过`NotificationCompat.Builder`和`NotificationChannel`,我们可以轻松地设计和管理这些通知,以...

    NotificationDemoWPF自定义通知窗体样式

    【标题】"NotificationDemoWPF自定义通知窗体样式"主要涉及的是在Windows Presentation Foundation (WPF) 平台上创建自定义的通知窗口。WPF是.NET Framework的一部分,它提供了丰富的用户界面设计工具和功能,允许...

    Android自定义通知栏Notification

    在Android开发中,自定义通知栏Notification是一种提升用户体验的重要手段。...这个项目不仅提供了基本的自定义通知功能,也可能包含了一些进阶技巧和优化措施,对深入理解Android通知系统非常有帮助。

    自定义工作流系统的设计与实现

    自定义工作流系统的设计与实现是一项复杂而重要的任务,它涉及到企业的日常运营效率和业务流程优化。本文档将深入探讨如何构建一个高效、灵活且用户友好的自定义工作流系统。 首先,我们需要理解工作流的基本概念。...

    swift-模仿iPhone本地通知自定义写了一个本地通知动画

    5. **Swift的定时器(Timer)**:可以用来模拟通知的延迟出现,就像系统通知那样。 6. **UIWindowScene**:如果你的应用支持多窗口场景,可能需要在特定的窗口场景中添加通知视图。 7. **响应用户交互**:当用户...

    自定义通知

    本教程将详细介绍如何自定义通知,以满足特定的界面和功能需求,让通知更具个性化。 一、创建基础通知 在Android中,我们可以使用`NotificationCompat.Builder`类来构建一个基本的通知。首先,需要引入`androidx....

    notification自定义通知栏,高仿UC浏览器360通知栏

    例如,我们可以自定义通知的扩展和收缩动画,或者利用系统的`Notification.FLAG_SHOW_LIGHTS`和`Notification.FLAG_ONLY_ALERT_ONCE`标志来控制LED灯闪烁和振动。 4. **优先级与可见性**:根据需求,可能需要调整...

    自定义Notification样例工程

    然而,Android系统默认的通知样式可能无法满足所有设计需求,因此我们需要自定义通知样式。这通常涉及到以下几个方面: 1. **大图标(Large Icon)**:除了小图标,我们还可以设置一个大图标,用`setLargeIcon`方法...

    版本更新,自定义进度条

    自定义通知栏布局可以包括改变通知图标、文本样式、颜色、甚至是添加额外的交互元素,如按钮或自定义视图。在代码实现中,通常会通过`NotificationCompat.Builder`类或者在Android O及以上版本使用`...

    MacOS添加系统通知中心源码示例

    在MacOS操作系统中,系统通知中心是用户获取应用程序更新、提醒和其他重要信息的主要途径。为了增强应用程序的功能,开发者有时需要自定义并添加新的通知源。本文将深入探讨如何使用Objective-C编程语言在MacOS上...

    Android高级应用源码-状态栏通知小图标,notification通知.zip

    1. **创建自定义通知图标** - 在Android中,通知图标需要遵循特定的设计规范,尤其是在Android O及以上版本,必须是白色且透明背景的。你可以使用Android Studio的Asset Studio或第三方工具来创建符合规范的图标。 ...

    app常驻通知栏通知栏

    9. **自定义布局**:如果需要更复杂的交互,可以通过`RemoteViews`来定制通知的布局,添加更多的控件和功能。 10. **适配不同Android版本**:由于Android系统版本众多,不同版本的API对通知的处理可能有所不同,...

    Android自定义日期选择器源码

    总的来说,自定义日期选择器是Android开发中的一个重要实践,它涉及到了Android UI设计、事件处理、动画、数据绑定等多个方面,对开发者全面理解Android系统具有很高的价值。通过这样的项目,开发者不仅可以提升技能...

    Android安卓应用源码-消息推送通知栏类源代码(5例).zip

    3. **自定义通知样式** - 可以通过设置扩展样式如`BigTextStyle`, `InboxStyle`或`PictureStyle`来自定义通知的内容展示。 - 使用`PendingIntent`为通知添加操作,例如点击通知后启动新的Activity或执行其他操作。...

    5.0之后通知栏

    本文将详细讲解5.0之后的系统默认通知栏特性,自定义通知栏的实现,以及弹出悬浮自定义通知栏的方法。 ### 一、系统默认通知栏 Android 5.0引入了Material Design设计语言,通知栏也遵循这一设计风格,变得更为...

    Android不使用自定义布局情况下实现自定义通知栏图标的方法

    本文将详细介绍如何在Android中不使用自定义布局创建自定义通知栏图标,这对于理解Android的通知机制和RemoteViews的使用具有重要的学习价值。 首先,创建一个通知的基本步骤包括以下几个关键点: 1. 创建`...

    继承ViewGroup自定义ViewPager

    在Android开发中,自定义控件是提升应用独特性和用户体验的重要手段。`ViewGroup`是Android UI组件的基础,它作为容器...记住,自定义控件的过程也是学习和理解Android系统工作原理的过程,这对提升开发技能大有裨益。

Global site tag (gtag.js) - Google Analytics