本文共 3097 字,大约阅读时间需要 10 分钟。
代码都加了注释了,整个操作都比较简单,上代码:
package com.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.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.RemoteViews; import android.widget.Toast; public class nofificationActivity extends Activity implements OnClickListener { private static final int NOTIFICATION_ID = 0x12 ; private Notification notification = null ; private NotificationManager manager = null ; public Handler handler; private int _progress = 0 ; private Thread thread = null ; private boolean isStop = false ; // 当界面处理停止的状态 时,设置让进度条取消 @Override protected void onPause() { // TODO Auto-generated method stub isStop = false ; manager.cancel(NOTIFICATION_ID); super .onPause(); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); Button btn = (Button) findViewById(R.id.Button01); btn.setOnClickListener( this ); notification = new Notification(R.drawable.icon, " 带进条的提醒 " , System .currentTimeMillis()); notification.icon = R.drawable.icon; // 通过RemoteViews 设置notification中View 的属性 notification.contentView = new RemoteViews(getApplication() .getPackageName(), R.layout.custom_dialog); notification.contentView.setProgressBar(R.id.pb, 100 , 0 , false ); notification.contentView.setTextViewText(R.id.tv, " 进度 " + _progress + " % " ); // 通过PendingIntetn // 设置要跳往的Activity,这里也可以设置发送一个服务或者广播, // 不过在这里的操作都必须是用户点击notification之后才触发的 notification.contentIntent = PendingIntent.getActivity( this , 0 , new Intent( this , remoteView. class ), 0 ); // 获得一个NotificationManger 对象,此对象可以对notification做统一管理,只需要知道ID manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); } @Override public void onClick(View v) { // TODO Auto-generated method stub isStop = true ; manager.notify(NOTIFICATION_ID, notification); thread = new Thread( new Runnable() { @Override public void run() { Thread.currentThread(); // TODO Auto-generated method stub while (isStop) { _progress += 10 ; Message msg = handler.obtainMessage(); msg.arg1 = _progress; msg.sendToTarget(); try { Thread.sleep( 500 ); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }); thread.start(); handler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub notification.contentView.setProgressBar(R.id.pb, 100 , msg.arg1, false ); notification.contentView.setTextViewText(R.id.tv, " 进度 " + msg.arg1 + " % " ); manager.notify(NOTIFICATION_ID, notification); if (msg.arg1 == 100 ) { _progress = 0 ; manager.cancel(NOTIFICATION_ID); isStop = false ; Toast.makeText(nofificationActivity. this , " 下载完毕 " , 1000 ) .show(); } super .handleMessage(msg); } }; } }
本文转自 terry_龙 51CTO博客,原文链接:http://blog.51cto.com/terryblog/386042,如需转载请自行联系原作者