直接上代码
<!-- 上网权限 和 获取网络状态的权限 -->
<uses-permission android :name= "android.permission.INTERNET" />
<uses-permission android :name= "android.permission.ACCESS_NETWORK_STATE" />
MainActivity
package com. example. lixin. downloaddemo;
import android.content.BroadcastReceiver ;
import android.content.Context ;
import android.content.Intent ;
import android.content.IntentFilter ;
import android.net.ConnectivityManager ;
import android.net.NetworkInfo ;
import android.support.v7.app.AppCompatActivity ;
import android.os.Bundle ;
import android.util.Log ;
import android.view.View ;
import android.widget.Toast ;
import org.xutils.common.Callback ;
import org.xutils.common.task.PriorityExecutor ;
import org.xutils.http.RequestParams ;
import org.xutils.x ;
import java.io.File ;
public class MainActivity extends AppCompatActivity {
private ConnectivityBroadcaseReceiver connectivityBroadcaseReceiver ;
private Callback.Cancelable cancelable ;
@Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R.layout . activity_main );
// 动态注册广播 , 创建一个 IntentFilter
IntentFilter filter = new IntentFilter ();
filter . addAction ( ConnectivityManager . CONNECTIVITY_ACTION );
connectivityBroadcaseReceiver = new ConnectivityBroadcaseReceiver ();
// 注册
registerReceiver ( connectivityBroadcaseReceiver , filter );
}
public void getDown (){
onclick ( null );
}
public void onclick ( View view ){
// 下载
RequestParams params = new RequestParams ( "http://img15.3lian.com/2015/h1/280/d/5.jpg" );
// 保存一下存储路径
params . setSaveFilePath ( getExternalCacheDir (). getAbsolutePath ()+ "/path" );
Log . e ( "tag" , "=====================" + getExternalCacheDir (). getAbsolutePath ());
// 设置可以断点续传
params . setAutoResume ( true );
// 设置一个线程池 有三个线程
params . setExecutor ( new PriorityExecutor ( 3 , true ));
cancelable = x . http (). get ( params , new Callback.ProgressCallback < File >() {
@Override
public void onSuccess ( File result ) {
Toast . makeText ( MainActivity . this , " 下载完成 " , Toast . LENGTH_SHORT ). show ();
}
@Override
public void onError ( Throwable ex , boolean isOnCallback ) {
Toast . makeText ( MainActivity . this , " 下载 onError" , Toast . LENGTH_SHORT ). show ();
}
@Override
public void onCancelled ( CancelledException cex ) {
}
@Override
public void onFinished () {
Toast . makeText ( MainActivity . this , " 下载 onFinished" , Toast . LENGTH_SHORT ). show ();
}
@Override
public void onWaiting () {
}
@Override
public void onStarted () {
}
@Override
public void onLoading ( long total , long current , boolean isDownloading ) {
Log . e ( "tag" , "progress+ " + current / total * 100 + "%" );
}
});
}
/**
* 接受网络状态的改变
*/
public class ConnectivityBroadcaseReceiver extends BroadcastReceiver {
@Override
public void onReceive ( Context context , Intent intent ) {
// 如果能走到这,说明网络已经发生变化
ConnectivityManager manager = ( ConnectivityManager ) getSystemService ( Context . CONNECTIVITY_SERVICE );
NetworkInfo networkInfo = manager . getActiveNetworkInfo ();
if ( networkInfo != null && networkInfo . isConnected ()){
if ( ConnectivityManager . TYPE_WIFI == networkInfo . getType ()){
Toast . makeText ( context , " 这是 wife" , Toast . LENGTH_SHORT ). show ();
} else if ( ConnectivityManager . TYPE_MOBILE == networkInfo . getType ()){
Toast . makeText ( context , " 这是移动网络 " , Toast . LENGTH_SHORT ). show ();
getDown ();
} else {
Toast . makeText ( context , " 网络不可用 , 请检查网络 " , Toast . LENGTH_SHORT ). show ();
cancelable . cancel ();
}
} else {
Toast . makeText ( context , " 网络不可用 , 请检查网络 " , Toast . LENGTH_SHORT ). show ();
}
}
}
@Override
protected void onDestroy () {
super . onDestroy ();
unregisterReceiver ( connectivityBroadcaseReceiver );
}
}
MyApplication(记得配置)
package com. example. lixin. downloaddemo;
import android.app.Application ;
import org.xutils.x ;
/**
* Created by hua on 2017/8/8.
*/
public class MyApplication extends Application {
@Override
public void onCreate () {
super . onCreate ();
x.Ext . init ( this );
}
}