博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 为Notification加上一个进度条
阅读量:6165 次
发布时间:2019-06-21

本文共 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,如需转载请自行联系原作者

你可能感兴趣的文章
华平蝉联“视频会议十大卓越品牌”
查看>>
Opera已确认解散iOS开发团队
查看>>
DevOps:新的业务浪潮
查看>>
CERT:启用EMET的Windows 7比Windows 10更加安全
查看>>
LINE上市:一场迟到、勇敢又无奈的IPO
查看>>
OA选型:OA系统工作流是核心
查看>>
如何发现“利用DNS放大攻击”的服务器
查看>>
《Arduino开发实战指南:LabVIEW卷》——第2章 Arduino软件
查看>>
京津冀大数据走廊起笔谋篇
查看>>
WIFI连网一“吻”通 黑科技让无线路由器更智能
查看>>
Ovum光器件首席分析师:硅光子不是唯一解决方案
查看>>
大数据发展进入快车道 未来会呈现高速增长
查看>>
Android厂商反对系统加密:因影响手机性能
查看>>
JVM基础:JVM内存组成及分配
查看>>
数据库锁和数据库隔离级别
查看>>
Linux下的内核测试工具——perf使用简介
查看>>
《从问题到程序:用Python学编程和计算》——2.3 内置函数和数学函数包
查看>>
《Photoshop修饰与合成专业技法》目录—导读
查看>>
《Metasploit渗透测试手册》—第1章1.10节分析数据库中存储的渗透测试结果
查看>>
《Adobe Acrobat XI经典教程》—第2课减小文件大小
查看>>