概述
今天,我想说的是一个比较简单的内容,即当我们在下载东西的时候,比如在下载app/电视剧之类的,在通知栏会有提示的进度条,也就是说,提示你下载了百分之几。然而我是通过与okhttp结合在网络上下载了一张图片,然后在通知栏显示进度条。好了,废话不多说了,下面请看代码:
因为有用到okhttp,所以还要注意一下下面的这个问题。
然后就是XML中的布局了。具体代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.acer_pc.progresscontent.MainActivity">
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击下载" />
<ImageView
android:id="@+id/iview"
android:layout_below="@id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
</RelativeLayout>
在activity中我已经添加了详细的注解,代码如下:
package com.example.acer_pc.progresscontent;
import android.app.Notification;
import android.app.NotificationManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import com.squareup.okhttp.Call;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import com.squareup.okhttp.ResponseBody;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity {
//图片的下载路径
private String path = "http://p3.so.qhmsg.com/t016f0540122dbc10c3.jpg";
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bitmap bitmap = (Bitmap) msg.obj;
//让进度条加载完成后自动消失
manager.cancel(3);
//为imageview设置图片资源
imageView.setImageBitmap(bitmap);
}
};
private Button button;
private ImageView imageView;
private NotificationManager manager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//查找控件
button = (Button) findViewById(R.id.btn);
imageView = (ImageView) findViewById(R.id.iview);
//创建notify管理者对象
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//button按钮的点击事件,当点击button按钮的时候进行进度条的显示,并下载图片
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//调用方法
init();
}
});
}
private void init() {
//创建notification builder 对象
final Notification.Builder mbuilder = new Notification.Builder(this);
//设置通知栏图标
mbuilder.setSmallIcon(android.R.mipmap.sym_def_app_icon);
//设置通知栏提示语
mbuilder.setContentText("正在下载");
//创建OkHttpClient对象
OkHttpClient client = new OkHttpClient();
//创建请求对象的建造者
final Request.Builder builder = new Request.Builder();
//添加下载路径
builder.url(path);
//通过建造者对象,创建请求对象
Request request = builder.build();
//创建call对象
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
//请求失败时调用的方法
public void onFailure(Request request, IOException e) {
}
@Override
//请求响应成功时调用的方法
public void onResponse(Response response) throws IOException {
//创建一个变量记录下载了的总的大小
int download = 0;
//获取响应对象
ResponseBody body = response.body();
//获取网络请求的最大值
int length = (int) body.contentLength();
//获取数据流
InputStream inputStream = body.byteStream();
//创建一个字节数组输出流
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len = 0;
byte[] bytes = new byte[1024];
while ((len = inputStream.read(bytes)) != -1) {
download += len;
mbuilder.setProgress(100, ((int) download / length * 100), false);
manager.notify(3, mbuilder.build());
bos.write(bytes, 0, bytes.length);
bos.flush();
}
//将字节数组输出流转换成bitmap对象
byte[] bytes1 = bos.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes1, 0, bytes1.length);
if (bitmap != null) {
Message message = handler.obtainMessage();
message.obj = bitmap;
handler.sendMessage(message);
}
}
});
}
}
这就是,今天所要介绍的内容了,欢迎大家集思广益,多多交流。
最后
以上就是炙热花瓣为你收集整理的notify——通知栏显示下载图片的进度条的全部内容,希望文章能够帮你解决notify——通知栏显示下载图片的进度条所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复