zoukankan      html  css  js  c++  java
  • Android 为Notification加上一个进度条

    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);
                }
            };
        }
    }

    作者:码农豆豆
    微信公众号:
    出处:http://www.cnblogs.com/fly_binbin/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    NX二次开发-UFUN计时函数UF_end_timer
    NX二次开发-UFUN写入本地文本文档uc4524
    NX二次开发-UFUN关闭本地文本文档uc4540
    NX二次开发-UFUN读取本地文本文档uc4514a
    MFC弹出选择文件和选择文件夹代码
    NX二次开发-UFUN多选菜单对话框uc1605
    NX二次开发-UFUN文件选择对话框UF_UI_create_filebox
    NX二次开发-UFUN多按钮模态对话框UF_UI_message_dialog
    NX二次开发-算法篇-找相切面
    NX二次开发-UFUN获取边的光顺性UF_MODL_ask_edge_smoothness(找相切面)
  • 原文地址:https://www.cnblogs.com/fly_binbin/p/2286134.html
Copyright © 2011-2022 走看看