Notification通知、普通通知、大视图通知、进度条通知, 子线程可以操作时度条、流动进度条通知、自定义通知

package com.example.aa;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Point;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationCompat.Builder;
import android.util.Log;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.RemoteViews;

/**
 * Object obj = context.getSystemService(Context.静态常量);返回一个系统服务对象 public void
 * test() { Context context = this;
 * 
 * NotificationManager notificationManager = (NotificationManager)
 * context.getSystemService(Context.NOTIFICATION_SERVICE);
 * 
 * LayoutInflater layoutInflater = (LayoutInflater)
 * context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 * 
 * WindowManager windowManager = (WindowManager)
 * context.getSystemService(Context.WINDOW_SERVICE); Display d1 =
 * windowManager.getDefaultDisplay(); // 获取屏幕宽、高用
 * System.out.println("------------d1---------:"+ d1.getHeight());//高用
 * System.out.println("------------d1---------:"+ d1.getWidth());//幕宽
 * 
 * LocationManager locationManager = (LocationManager)
 * context.getSystemService(Context.LOCATION_SERVICE); }
 */
public class MainActivity extends Activity {
	Builder builder = null;
	NotificationManager manager = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	private int id1 = 0; // 通知的id
	private int num = 1; // 通知的编号

	public Builder initBuilder(Builder builder) {
		return builder;
	}
/****************************普通通知--标准通知************************************************/
	// 普通通知--标准通知
	public void notification(View v) {
		NotificationCompat.Builder builder = new NotificationCompat.Builder(
				this);

		builder.setSmallIcon(R.drawable.ic_launcher);// 设置小图片,可选,在右下角
		builder.setContentTitle("5 new message");// 设置标题
		builder.setContentText("[email protected]");// 设置内容

		builder.setTicker("New message");// 第一次提示消息的时候显示在通知栏上
		builder.setNumber(num++);// 设置通知编号

		Bitmap btm = BitmapFactory.decodeResource(this.getResources(),
				R.drawable.test);
		builder.setLargeIcon(btm);// 设置大图片 在左边

		builder.setAutoCancel(true);// 自己维护通知的消失

		// 构建一个Intent
		Intent intent = new Intent(this, ResultActivity.class);
		intent.putExtra("name", "王光荣");
		/**
		 * 封装一个Intent 用于标识PendingIntent的构造选择:
		 * FLAG_CANCEL_CURRENT:如果构建的PendingIntent已经存在,则取消前一个,重新构建一个。
		 * FLAG_NO_CREATE:如果前一个PendingIntent已经不存在了,将不再构建它。
		 * FLAG_ONE_SHOT:表明这里构建的PendingIntent只能使用一次。
		 * FLAG_UPDATE_CURRENT:如果构建的PendingIntent已经存在,则替换它,常用。
		 */
		PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0,
				intent, PendingIntent.FLAG_UPDATE_CURRENT);
		// 设置通知主题的意图 可选
		builder.setContentIntent(resultPendingIntent);

		Notification notification = builder.build();// 创建通知

		// 获取通知管理器对象,用于帮助通知的显示,取消等等
		NotificationManager notificationManager = (NotificationManager) this
				.getSystemService(Context.NOTIFICATION_SERVICE);
		/**
		 * 参数1:使用任意整数,表示通知的id, 如果两个通知的id相同,第二个通知会替换第一个通知 参数2: 要被显示的通知对象
		 */
		notificationManager.notify(id1++, notification);// 显示通知
		// notificationManager.cancel(id1);//根据通知id取消通知
	}
/*******************************大视图通知******************************************************/
	// 大视图通知
	public void bignotification(View v) {
		Bitmap btm = BitmapFactory.decodeResource(getResources(),
				R.drawable.test);

		Intent intent = new Intent(MainActivity.this, ResultActivity.class);
		PendingIntent pendingIntent = PendingIntent
				.getActivity(MainActivity.this, 0, intent,
						PendingIntent.FLAG_CANCEL_CURRENT);

		// 创建builder
		NotificationCompat.Builder builder = new NotificationCompat.Builder(
				MainActivity.this);
		// 使用builder设置属性
		builder.setSmallIcon(R.drawable.test1);// 设置小图标
		builder.setLargeIcon(btm);// 设置大图标
		builder.setNumber(13);// 设置编号
		builder.setContentIntent(pendingIntent);// 设置意图
		// builder.setContentTitle("标题");//设置不生效
		// builder.setContentText("内容");//设置不生效

		NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
		inboxStyle.setBigContentTitle("华清远见");// 大标题,在最上面
		inboxStyle.addLine("中华人民共和国1");
		inboxStyle.addLine("中华人民共和国2");
		inboxStyle.addLine("中华人民共和国3");
		inboxStyle.addLine("中华人民共和国4");
		inboxStyle.addLine("中华人民共和国5");
		inboxStyle.addLine("中华人民共和国6");
		inboxStyle.setSummaryText("www.hqyj.com");// 落脚,在最下面

		// 设置大视图
		builder.setStyle(inboxStyle);

		// 创建通知
		Notification notification = builder.build();

		// 显示通知
		NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
		notificationManager.notify(0, notification);
	}
/*********************************进度条通知, 子线程可以操作时度条*****************************************************/
	// 进度条通知, 子线程可以操作时度条
	public void progressnotification(View v) {
		manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
		// 第一步,创建Builder对象
		builder = new NotificationCompat.Builder(this);
		// 第二步,设置属性
		builder.setSmallIcon(R.drawable.ic_launcher);// 设置小图标,如果不设置大图标,小图标当作大图标使用,而小图标不见了
		builder.setContentTitle("下载图片");// 设置标题
		builder.setContentText("正在下载");// 设置内容
		builder.setAutoCancel(true); // 设置用户自己维护通知的取消, 默认值为true

		new Thread() {
			public void run() {
				for (int i = 0; i <= 100; i++) {
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					if (i == 100) {
						builder.setContentText("下载完毕");
					}
					builder.setProgress(100, i, false);// 设置进度条,并且总进度为100,当前进度为30, false表示能看到进度
					// 第三步,创建通知
					Notification notification = builder.build();
					// 第四步,显示通知
					manager.notify(0, notification);
				}
			}
		}.start();

	}
/*****************************流动进度条通知***************************************************/
	// 流动进度条通知
	public void cycleprogressnotification(View v) {
		manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
		// 1,创建builder
		builder = new NotificationCompat.Builder(this);
		// 2,使用builder设置属性
		builder.setSmallIcon(R.drawable.ic_launcher);
		builder.setContentTitle("Picture Download");
		builder.setContentText("Download in progress");
		builder.setProgress(0, 0, true);// 设置为true表示流动,看不见时度,所以 0,0不起作用
		manager.notify(0, builder.build());
		// 5秒之后还停止流动
		new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					Thread.sleep(5000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				builder.setProgress(100, 100, false);// 设置为false,表示刻度
				builder.setContentText("下载完毕");
				manager.notify(0, builder.build());
			}
		}).start();
	}
/****************************自定义通知********************************************************/
	// 自定义通知
	public void mySelfnotification(View v) {
		/**创建自定界面
		 * 参数1:是activity的包名, 可以使用activity.getPackageName()得到com.example.aa
		 * 参数2:布局文件
		 */
		RemoteViews contentViews = new RemoteViews("com.example.aa", R.layout.custom_notifition);
		// 通过控件的Id设置属性
		contentViews.setImageViewResource(R.id.imageView, R.drawable.test);
		contentViews.setTextViewText(R.id.button, "钱");
		contentViews.setTextViewText(R.id.textView, "又得了5分钱");

		// 封装了一个发送广播的意图
		Intent intentx = new Intent("broadcast.btn");//字符串表示广播类
		PendingIntent intentpi = PendingIntent.getBroadcast(this, 1, intentx,PendingIntent.FLAG_UPDATE_CURRENT);
		contentViews.setOnClickPendingIntent(R.id.button, intentpi);// 点击按钮触发意图,意图可以是广播意图,也可以是跳转Activity的意图

		Intent intent = new Intent(this, ResultActivity.class);
		PendingIntent pendingIntent = PendingIntent
				.getActivity(MainActivity.this, 0, intent,
						PendingIntent.FLAG_CANCEL_CURRENT);

		//1,创建Builder对象
		NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
		//2,设置属性
		builder.setSmallIcon(R.drawable.ic_launcher);//设置小图标,只出现在新通知来后的提示
		builder.setContentTitle("My notification");// 设置了无效,不设报错
		builder.setTicker("new message");//新通知来后的显示信息
		builder.setAutoCancel(true);
		
		builder.setContentIntent(pendingIntent);//设置意图,意图可以是广播意图,也可以是跳转Activity的意图
		builder.setContent(contentViews);// 设置自定义界面

		NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
		mNotificationManager.notify(10, builder.build());
	}
}
















package com.example.aa;

import android.app.Activity;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.view.View;
import android.widget.Button;

public class ResultActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Intent intent = this.getIntent();
		String name = intent.getStringExtra("name");//王光荣
		Button btn = new Button(this);
		btn.setText(name);
		setContentView(btn);
	}
}


 
  


    

    

 
  

		
		
		


 
  

你可能感兴趣的:(Android基础)