Я несколько дней застревал при разработке функции, позволяющей пользователю проверять наличие новых обновлений приложения (я использую локальный сервер в качестве точки распространения). Проблема в том, что процесс загрузки работает нормально, но я не смог найти загруженный файл в любом месте своего телефона (у меня нет SD-карты / внешней памяти). Ниже то, что я сделал до сих пор.
class DownloadFileFromURL extends AsyncTask<String, String, String> {
ProgressDialog pd;
String path = getFilesDir() + "/myapp.apk";
@Override
protected void onPreExecute() {
super.onPreExecute();
pd = new ProgressDialog(DashboardActivity.this);
pd.setTitle("Processing...");
pd.setMessage("Please wait.");
pd.setMax(100);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setCancelable(true);
//pd.setIndeterminate(true);
pd.show();
}
/**
* Downloading file in background thread
* */
@Override
protected String doInBackground(String... f_url) {
int count;
try {
URL url = new URL(f_url[0]);
URLConnection conection = url.openConnection();
conection.connect();
// download the file
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(path);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress("" + (int) ((total * 100) / lenghtOfFile));
// writing data to file
output.write(data, 0, count);
}
// flushing output
output.flush();
// closing streams
output.close();
input.close();
} catch (Exception e) {
Log.e("Error: ", e.getMessage());
}
return path;
}
protected void onProgressUpdate(String... progress) {
pd.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String file_url) {
// dismiss the dialog after the file was downloaded
if (pd!=null) {
pd.dismiss();
}
// i am going to run the file after download finished
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(new File(file_url)), "application/vnd.android.package-archive" );
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Log.d("Lofting", "About to install new .apk");
getApplicationContext().startActivity(i);
}
}
После того, как диалоговое окно прогресса достигло 100% и было закрыто, я не смог найти файл. Я предполагаю, что это причина, по которой приложение не может продолжить установку загруженного apk.
Я пропустил какой-то код?
file_url
? - person Rohit5k2   schedule 19.11.2018