文件下载通告栏显示下载进度和下载文件名称

之前刚刚学习ANDROID的时候,感觉这种效果非常的难,不是像我这种资质的人能学会的。现在慢慢学习,又看到以前的大神们所写的功能,慢慢觉得我也行了。呵呵……非常感谢那些百忙之中写下自己心得和经验的大神们。



public class MainActivity extends Activity implements OnClickListener {

private static final String ACTION_DOWNLOAD="org.gjt.chang";
private DownloadReceiver receiver;
private NotificationManager manager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
layout.setOrientation(LinearLayout.HORIZONTAL);
layout.setBackgroundColor(0xff000000);
Button btn = new Button(this);
btn.setText("download");
btn.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
btn.setTag(1);
btn.setTextColor(0xff7fff00);
btn.setOnClickListener(this);
layout.addView(btn);
btn = new Button(this);
btn.setText("cancel");
btn.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
btn.setTag(2);
btn.setTextColor(0xff7fff00);
btn.setOnClickListener(this);
layout.addView(btn);

this.setContentView(layout);


//文件下载广播接收者
//或者也可以通过构造方法,把所要下载的文件路径DownloadReceiver类中去
receiver = new DownloadReceiver();
//通知管理器
manager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
}


@Override
protected void onStart() {
super.onStart();
//增加广播事件监听过滤器
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_DOWNLOAD);
registerReceiver(receiver, filter);//注册广播监听事件
}

@Override
protected void onDestroy() {
unregisterReceiver(receiver);//取消所注册的广播事件监听
super.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu1:
sendDownloadBroadcase();
break;
case R.id.menu2:
cancelDownloadBroadcase();
break;


}
return super.onOptionsItemSelected(item);
}


/*************下载广播监听者*******************/
private class DownloadReceiver extends BroadcastReceiver{
private int num=0;//当前所下载的大小
private float file_size=15;//文件大小
private String file_name="手机动漫";//文件名称
@Override
public void onReceive(Context context, Intent intent) {
Log.i("TEST","action:"+intent.getAction());
if(intent.getAction()==ACTION_DOWNLOAD){
new Thread(){
public void run() {
while(num<file_size){
num++;
try {
Thread.sleep(1000);
//发送通告
showNotification(num, file_name, file_size);//发送通告
} catch (InterruptedException e) {
e.printStackTrace();
}
}
num=0;//还原初始值
};
}.start();
}
}

}



/******发送广播下载事件******/
private void sendDownloadBroadcase(){
//发送广播事件
Intent intent = new Intent();
intent.setAction(ACTION_DOWNLOAD);
sendBroadcast(intent);
}
/******取消通知******/
private void cancelDownloadBroadcase(){
manager.cancel(0);//取消-----通告ID
}
@Override
public void onClick(View v) {
Log.i("TEST", ""+v.getTag());
if((Integer)v.getTag()==1){
sendDownloadBroadcase();
}else if((Integer)v.getTag()==2){
cancelDownloadBroadcase();
}
}

/*********************
* 功能:发送文件下载通告
* @param percent   当前已下载的文件大小
* @param name       当前下载的文件名称
* @param file_size  当前所下载的文件大小
*/
private void showNotification(int percent,String name,float file_size){
@SuppressWarnings("deprecation")
Notification nf = new Notification(R.drawable.img4,"正在下载...",System.currentTimeMillis());
PendingIntent intent = PendingIntent.getActivity(this, 0,
new Intent(this,DownloadReceiver.class), 0);
//加载布局
RemoteViews view = new RemoteViews(this.getPackageName(), R.layout.layout_ad);
view.setTextViewText(R.id.title, name);//设置正在下载文件名称
percent = (int) (percent/file_size*100);
view.setTextViewText(R.id.percent, percent+"%");//设置当前下载的进度
view.setProgressBar(R.id.progress, 100, percent, false);//设置PROGRESSBAR显示的进度值
nf.contentView = view;
nf.contentIntent = intent;
manager.notify( 0, nf);
}

}

下载地址:

http://download.csdn.net/detail/util_c/6776169

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值