实现直播带货系统开发通知栏显示下载图片的进度条

直播带货系统开发实现通知栏显示下载图片的进度条具体代码如下:

<?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>

 

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

}
});

}

}

 


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

}
});

}

}
以上就是 直播带货系统开发实现通知栏显示下载图片的进度条,更多内容欢迎关注之后的文章

上一篇:[转] 聊聊OkHttp实现WebSocket细节,包括鉴权和长连接保活及其原理!


下一篇:Android:OkHttp的理解和使用