先放个gif。。最终效果如果:

1ded4a828e4da8696a48091f58351708.gif

主要演示了Android从服务器下载文件,调用Notification显示下载进度,并且在下载完毕以后点击通知会跳转到安装APK的界面,演示是在真实的网络环境中使用真实的URL进行演示,来看看代码:

MainActivity代码非常简单,就是启动一个Service:

public class MainActivity extends AppCompatActivity {

String download_url="http://shouji.360tpcdn.com/160329/a9037075b8d3aa98fbf6115c54a5b895/com.alensw.PicFolder_4722404.apk";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

public void bt_start_service(View view){

Intent intent=new Intent(this,DownLoadService.class);

intent.putExtra("download_url",download_url);

startService(intent);

}

}

DownLoadService里面,在onStartCommand方法里面是关键代码,调用NotifyUtil这个工具类的“notify_progress”方法去显示一个通知,与此同时开始下载APK文件,DownLoadService代码如下:

public class DownLoadService extends Service {

String download_url;

String savePath= Environment.getExternalStorageDirectory()+"/liulan.apk";

private int requestCode = (int) SystemClock.uptimeMillis();

private NotifyUtil currentNotify;

File mFile;

@Nullable

@Override

public IBinder onBind(Intent intent) {

return null;

}

@Override

public void onCreate() {

super.onCreate();

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

mFile=new File(savePath);

download_url=intent.getStringExtra("download_url");

Log.e("test","执行onStartCommand");

//设置想要展示的数据内容

Intent intent_noti = new Intent();

intent_noti.setAction(Intent.ACTION_VIEW);

//文件的类型,从tomcat里面找

intent_noti.setDataAndType(Uri.fromFile(mFile), "application/vnd.android.package-archive");

PendingIntent rightPendIntent = PendingIntent.getActivity(this,

requestCode, intent_noti, PendingIntent.FLAG_UPDATE_CURRENT);

int smallIcon = R.drawable.xc_smaillicon;

String ticker = "正在更新快图浏览";

//实例化工具类,并且调用接口

NotifyUtil notify7 = new NotifyUtil(this, 7);

notify7.notify_progress(rightPendIntent, smallIcon, ticker, "快图浏览升级程序", "正在下载中",

false, false, false, download_url, savePath, new NotifyUtil.DownLoadListener() {

@Override

public void OnSuccess(File file) {

mFile=file;

DownLoadService.this.stopSelf();

}

@Override

public void onFailure(Throwable t, int errorNo, String strMsg) {

}

});

currentNotify = notify7;

return super.onStartCommand(intent, flags, startId);

}

}

在调用“notify_progress”方法的时候,已经开始下载文件了,那么下载的代码是什么呢?如下:

public void notify_progress(PendingIntent pendingIntent, int smallIcon,

String ticker, String title, String content,

boolean sound, boolean vibrate, boolean lights,

String download_url, String savePath, final DownLoadListener listener) {

setCompatBuilder(pendingIntent, smallIcon, ticker, title, content, sound, vibrate, lights);

/*

* 因为进度条要实时更新通知栏也就说要不断的发送新的提示,所以这里不建议开启通知声音。

* 这里是作为范例,给大家讲解下原理。所以发送通知后会听到多次的通知声音。

*/

FinalHttp fh = new FinalHttp();

HttpHandler httpHandler=fh.download(download_url, savePath, new AjaxCallBack() {

@Override

public void onLoading(long count, long current) {

super.onLoading(count, current);

double a=count;

double b=current;

double currentPro=(double)((b/a)*100);

cBuilder.setProgress(100, (int)currentPro, false);

sent();

}

@Override

public void onSuccess(File file) {

super.onSuccess(file);

cBuilder.setContentText("下载完成").setProgress(0, 0, false);

sent();

listener.OnSuccess(file);

}

@Override

public void onFailure(Throwable t, int errorNo, String strMsg) {

super.onFailure(t, errorNo, strMsg);

listener.onFailure(t,errorNo,strMsg);

}

});

}

这个jar已经封装好下载的工具类,我们直接拿来用就行。下载成功之后会通过DownLoadListener这个接口回调到DownLoadService里面,最终运行效果就如最上面那个gif动态图运行效果一样。

项目下载地址:点击下载

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐