android项目实现带进度条的系统通知栏消息

我们在做Android开发的时候经常会遇到后台线程执行的比如说下载文件的时候,这个时候我们希望让客户能看到后台有操作进行,这时候我们就可以使用进度条,那么既然在后台运行,为的就是尽量不占用当前操作空间,用户可能还要进行其他操作,最好的方法就是在通知栏有个通知消息并且有个进度条。本文给一个例子工读者参考.
效果图如下:

主界面只有一个按钮就不上文件了

通知栏显示所用到的布局文件content_view.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="#00000000"
  android:orientation="vertical"
  android:padding="5dp"> 

  <ImageView
    android:id="@+id/content_view_image"
    android:layout_width="25dp"
    android:layout_height="25dp"
    android:src="@drawable/logo" 

    />
  <TextView
    android:id="@+id/content_view_text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="0%"
    android:textColor="#000000"
    android:layout_toRightOf="@id/content_view_image"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="5dp"
    android:layout_marginLeft="15dp"
   />
  <ProgressBar
    android:id="@+id/content_view_progress"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    style="@android:style/Widget.ProgressBar.Horizontal"
    android:max="100"
    android:layout_below="@id/content_view_image"
    android:layout_marginTop="4dp"
    /> 

</RelativeLayout>

主运行类:

package yyy.testandroid4; 

import java.util.Timer;
import java.util.TimerTask; 

import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager.NameNotFoundException;
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 TestAndroid4Activity extends Activity { 

  private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
      // TODO Auto-generated method stub
      super.handleMessage(msg);
      switch (msg.what) {
      case 0:
        notif.contentView.setTextViewText(R.id.content_view_text1, len+"%");
        notif.contentView.setProgressBar(R.id.content_view_progress, 100, len, false);
        manager.notify(0, notif); 

        break;
      case 1:
        Toast.makeText(TestAndroid4Activity.this, "下载完成", 0).show();
        break;
      default:
        break;
      }
    } 

  }; 

  private Button update,cancel;
  private int localVersion,serverVersion;
  private int len;
  private NotificationManager manager;
  private Notification notif;
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); 

    update = (Button) findViewById(R.id.update); 

    update.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View arg0) {
        // TODO Auto-generated method stub
        //点击通知栏后打开的activity
        Intent intent = new Intent(TestAndroid4Activity.this,OtherActivity.class); 

        PendingIntent pIntent = PendingIntent.getActivity(TestAndroid4Activity.this, 0, intent, 0);
           manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notif = new Notification();
        notif.icon = R.drawable.logo;
        notif.tickerText = "新通知";
        //通知栏显示所用到的布局文件
        notif.contentView = new RemoteViews(getPackageName(), R.layout.content_view);
        notif.contentIntent = pIntent;
        manager.notify(0, notif);
        new DownLoadThread().start();
      }
    }); 

  }
 } 

  private class DownLoadThread extends Thread{
    private Timer timer = new Timer();
    @Override
    public void run() {
      // TODO Auto-generated method stub
      super.run();
      timer.schedule(new TimerTask() {
        @Override
        public void run() {
          // TODO Auto-generated method stub 

          Message msg = new Message();
          msg.what = 0;
          msg.obj = len;
          handler.sendMessage(msg); 

          if(len == 100){
            timer.cancel();
            handler.sendEmptyMessage(1);
          } 

        }
      }, 0, 1000);
      len = 0;
      try {
        while(len < 100){
          len++;
          Thread.sleep(1000);
        }
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    } 

  } 

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android如何获取系统通知的开启状态详解

    前言 大家应该都有所体会,平常在android应用中,有时候会用到系统通知是否开启的状态,以便进行下一步操作,所以,获取到状态是很有必要的,之前一直苦于找不到合适的方法来解决,因为毕竟涉及到系统,不好办,今日看到大神支招,试了一下,很好用,话不多少了,来一起看看详细的介绍吧. 有图有真相,首先到设置里边关闭该应用的通知开关: 然后在应用中,点击按钮,获取状态: 这时候,回到设置里,打开通知按钮: 再次点击应用中的测试按钮,可以看到,通知已经可用了: 代码量很少,但是很精辟,就一个工具类,用到了j

  • Android中使用Notification实现状态栏的通知

    在使用手机时,当有未接来电或者新短消息时,手机会给出响应的提示信息,这些提示信息通常会显示到手机屏幕的状态栏上. Android也提供了用于处理这些信息的类,它们是Notification和NotificationManager.其中,Notification代表的是具有全局效果的通知,而NotificationManager则是用于发送Notification通知的系统服务. 使用Notification和NotificationManager类发送和显示通知也比较简单,大致可以分为以下四个步

  • android项目实现带进度条的系统通知栏消息

    我们在做Android开发的时候经常会遇到后台线程执行的比如说下载文件的时候,这个时候我们希望让客户能看到后台有操作进行,这时候我们就可以使用进度条,那么既然在后台运行,为的就是尽量不占用当前操作空间,用户可能还要进行其他操作,最好的方法就是在通知栏有个通知消息并且有个进度条.本文给一个例子工读者参考. 效果图如下: 主界面只有一个按钮就不上文件了 通知栏显示所用到的布局文件content_view.xml <?xml version="1.0" encoding="u

  • Android 带进度条的WebView 示例代码

    前言 如果不使用系统自带的TitleBar(即Activity被设置@android:style/Theme.NoTitleBar),那就需要自己来写进度条了,这里封装了一个自定义控件和加载网页的公共Activity,方便使用. 正文 一.截图 二.自定义控件 复制代码 /** * 带进度条的WebView * http://www.cnblogs.com/over140/archive/2013/03/07/2947721.html * */ @SuppressWarnings("deprec

  • Android编程开发实现带进度条和百分比的多线程下载

    本文实例讲述了Android编程开发实现带进度条和百分比的多线程下载.分享给大家供大家参考,具体如下: 继上一篇<java多线程下载实例详解>之后,可以将它移植到我们的安卓中来,下面是具体实现源码: DownActivity.java: package com.example.downloads; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.net.H

  • android中实现OkHttp下载文件并带进度条

    OkHttp是比较火的网络框架,它支持同步与异步请求,支持缓存,可以拦截,更方便下载大文件与上传文件的操作.下面我们用OkHttp来下载文件并带进度条! 相关资料: 官网地址:http://square.github.io/okhttp/ github源码地址:https://github.com/square/okhttp 一.服务器端简单搭建 可以参考搭建本地Tomcat服务器及相关配置这篇文章. 新建项目OkHttpServer,在WebContent目录下新建downloadfile目录

  • Android自定义带进度条WebView仿微信加载过程

    在正常开发中,我们客户端需要用webView加载网页,再遇到网络慢或者访问的服务器响应时,页面是空白的,所以为了用户更好的体验,我们可以提供一个正在加载的进度条,提示用户正在加载. 本文结构: 1.自定义webView 2.在应用中的使用 3.效果展示 一.自定义webView 1.首先定义一个类,继承webView,并首先构造方法 public class ProgressBarWebView extends WebView{} 自定义控件,先实现构造方法, 第一中是程序内部实例化采用,传入c

  • Android带进度条的文件上传示例(使用AsyncTask异步任务)

    最近项目中要做一个带进度条的上传文件的功能,学习了AsyncTask,使用起来比较方便,将几个方法实现就行,另外做了一个很简单的demo,希望能对大家有帮助,在程序中设好文件路径和服务器IP即可. demo运行截图: AsyncTask是抽象类,子类必须实现抽象方法doInBackground(Params... p),在此方法中实现任务的执行工作,比如联网下载或上传.AsyncTask定义了三种泛型类型Params,Progress和Result. 1.Params 启动任务执行的输入参数,比

  • Android中实现Webview顶部带进度条的方法

    写这篇文章,做份备忘,简单滴展示一个带进度条的Webview示例,进度条位于Webview上面. 示例图如下: 主Activity代码: 复制代码 代码如下: package com.droidyue.demo.webviewprogressbar; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.vi

  • Android 实现带进度条的WebView的实例

    Android 实现带进度条的WebView的实例 1. WebView加载网页方法 //加载本地资源 loadUrl("file:///android_asset/example.html"); //加载网络资源 loadUrl("http://baidu.com"); 2. 带进度的Drawable文件view_progress_webview <?xml version="1.0" encoding="utf-8"

  • android多线程断点下载-带进度条和百分比进度显示效果

    android多线程断点下载,带进度条和百分比显示,断点下载的临时数据保存到SD卡的文本文档中,建议可以保存到本地数据库中,这样可以提高存取效率,从而提高系统性能. 效果: 打开软件: 下载中: 下载完毕: 附代码如下: package com.yy.multiDownloadOfBreakPoint; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.R

  • Android实现文件解压带进度条功能

    解压的工具类 package com.example.videodemo.zip; public class ZipProgressUtil { /*** * 解压通用方法 * * @param zipFileString * 文件路径 * @param outPathString * 解压路径 * @param listener * 加压监听 */ public static void UnZipFile(final String zipFileString, final String out

随机推荐