自定义Notification模拟数据下载状态栏的提示

运行效果图:





修改activity_main.xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="自定义Notification控件展示系统提示下载" />
    <Button 
        android:id="@+id/btnSend"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="发送下载命令"/>
    <Button 
        android:id="@+id/btnClear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="清除下载进度条"/>

</LinearLayout>


新建自定义mynotification.xml布局,代码:

<?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" >
<!-- 自定义的Notification布局 -->
    <TextView
        android:id="@+id/Tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:text="正在下载" />
    <!-- 定义一个进度条 -->
    <ProgressBar
        android:id="@+id/Pb"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical" />

</LinearLayout>


修改MainActivity.java文件,代码:


import android.os.Bundle;
import android.os.Handler;
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.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.RemoteViews;

public class MainActivity extends Activity {
	private Button btnSend,btnClear;//定义Button控件
	//定义NotificationManager对象
	private NotificationManager nm;
	//定义一个Notification对象
	private Notification notification;
	//记录进度条的进度
	private int count=0;
	//记录进度条是否取消
	private Boolean isClear=false;
	//定义Notification的id
	private int notification_id=1;
	//定义主线程的Handler对象
	private Handler handler=new Handler();
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);//清楚标题
		setContentView(R.layout.activity_main);
		findById();//获取控件对象
		SendNotification();
	}
	private void SendNotification() {
		//得到NotificationManager的服务对象
				nm=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
				初始化Notification
				notification=new Notification(R.drawable.bg, "开始下载", System.currentTimeMillis());
				//得到Notification的视图对象
				notification.contentView=new RemoteViews(getPackageName(),R.layout.mynotification);
				//设置视图中的ProgressBar对象
				notification.contentView.setProgressBar(R.id.Pb, 100, 0, false);
				//定义单机通知的事件
				Intent notificationIntent=new Intent(this, MainActivity.class);
				PendingIntent contentIntent= PendingIntent.getActivity(this, 0, notificationIntent, 0);
				notification.contentIntent=contentIntent;
	}
	//自定义按钮单机监听器
	OnClickListener mylis=new OnClickListener() {
		@Override
		public void onClick(View view) {
			switch (view.getId()) {
			case R.id.btnClear:
				nm.cancel(notification_id);//取消notification
				break;
			case R.id.btnSend:
				showNotification();
				handler.post(run);
				break;
			default:
				break;
			}
		}

		
	};
	//定义线程Runnable对象进行进度更新
	Runnable run=new Runnable() {
		@Override
		public void run() {
			//如果线程没取消
			if(!isClear){
				count++;//更新进度
				notification.contentView.setProgressBar(R.id.Pb, 100, count, false);
				//更新notification就是更新进度条
				showNotification();
				if(count<100){
					//两百毫秒之后count+1
					handler.postDelayed(run,200);
				}
				if(count==100){
					isClear=true;
					nm.cancel(notification_id);//取消notification
					sendNotification(R.drawable.bg, "下载成功", "水木年华.MP3", "5.60M");
				}
			}
		}
	};
	//显示Notification
	private void showNotification() {
		nm.notify(notification_id, notification);
	}
	private void findById() {
		btnSend=(Button) findViewById(R.id.btnSend);
		btnSend.setOnClickListener(mylis);
		btnClear=(Button) findViewById(R.id.btnClear);
		btnClear.setOnClickListener(mylis);
	}
	
	//发送一个Notification系统通知,参数1:图片ID,参数2:显示notification对象的提示内容,参数3:状态栏中显示的标题,参数4:状态栏中的信息
		private void sendNotification(int imageId,String titleText,String showTitleText,String content){
			//得到系统的Notification服务对象
			NotificationManager manager=(NotificationManager) 
					this.getSystemService(Context.NOTIFICATION_SERVICE);
			//创建一个Notification对象
			Notification notification=new Notification();
			//设置显示的Notification对象的图标
//			notification.icon=R.drawable.notification_bg;
			notification.icon=imageId;//接收参数的图片信息
			//设置显示的notification对象的内容
//			notification.tickerText="您有一条新的消息!";
			notification.tickerText=titleText;//接收参数的内容
			
			//设置显示Notification对象的声音
			notification.defaults=Notification.DEFAULT_SOUND;
			//设置显示notification对象的声音模拟
			notification.audioStreamType=android.media.AudioManager.ADJUST_LOWER;
			
			//定义单机Notification的时间Intent
			Intent intent=new Intent(this, MainActivity.class);
			PendingIntent pendingIntent=PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
			//单机状态栏的图标出现的提示信息设置
//			notification.setLatestEventInfo(this, "消息内容", "认识你很高心!", pendingIntent);
			notification.setLatestEventInfo(this, showTitleText, content, pendingIntent);
			//发送Notification消息
			manager.notify(1, notification);
			}
	
}


其中:是借用的模拟短信提醒的demo,个人查看地址:http://blog.csdn.net/zsh157621866651/article/details/51545002



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饕餮幻想家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值