Android 는 오픈 소스 프로젝트 xutils 3 를 기반 으로 다운 로드 를 실현 합 니 다.
먼저 xutils 의존 구축(이전 블 로 그 는 이미 구체 적 으로 방법 을 썼 다)
먼저 효과 도 보기:
다음 시작 코드 의 논리:
xutils 3 이전에 HttpUtils 새 대상 을 사용 하면 사용 할 수 있 습 니 다.3 이후 HttpUtils 가 취소 되 었 습 니 다.구체 적 인 방법 은 코드 를 보십시오.
우선 레이아웃 activity 만 들 기main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:id="@+id/et_path"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint=" "
android:text="http://10.173.29.234/gp.apk" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "
android:onClick="click"/>
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
그리고 MainActivity.java:
import android.app.Activity;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;
import java.io.File;
public class MainActivity extends AppCompatActivity {
private EditText et_path;
private ProgressBar pb;
//
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE" };
private String fileName;
private String appName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
verifyStoragePermissions(this);
x.view().inject(this);
et_path = findViewById(R.id.et_path);
pb = findViewById(R.id.progressBar);
}
// ( )
public void click(View view) {
//
String path = et_path.getText().toString().trim();
fileName = getFileName(path);
RequestParams params = new RequestParams(path);
params.setSaveFilePath(fileName);
params.setAutoRename(true);
x.http().get(params, new Callback.ProgressCallback<File>() {
@Override
public void onWaiting() {
}
@Override
public void onStarted() {
}
@Override
public void onLoading(long total, long current, boolean isDownloading) {
//totle ,current
pb.setMax((int) total);
pb.setProgress((int) current);
System.out.println(" 1");
}
@Override
public void onSuccess(File result) {
System.out.println(" ");
Toast.makeText(getApplicationContext(), " ", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
System.out.println(" 2");
}
@Override
public void onCancelled(CancelledException cex) {
System.out.println(" 3");
}
@Override
public void onFinished() {
System.out.println(" 4");
}
});
}
//
public static void verifyStoragePermissions(Activity activity) {
try {
//
int permission = ActivityCompat.checkSelfPermission(activity,
"android.permission.WRITE_EXTERNAL_STORAGE");
if (permission != PackageManager.PERMISSION_GRANTED) {
// , ,
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
}
} catch (Exception e) {
e.printStackTrace();
}
}
// -->"http://10.173.29.234/test.exe"
public String getFileName(String path) {
int start = path.lastIndexOf("/") + 1;
appName = path.substring(start);
// String fileName = Environment.getExternalStorageDirectory().getPath()+"/"+subString;
String fileName = "/sdcard/file/"+ appName;
return fileName;
}
}
53 번 째 줄 주의 x.http().get(params,new Callback.ProgressCallback권한 추가:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.