Pobieram plik z serwera po zakończeniu pobierania. Muszę otworzyć plik. Znać problem, że plik może być dowolnego typu, więc nie mogę określić i intencji wywołać, aby otworzyć plik z nazwą statyczną, tak jak my, aby otworzyć plik PDF. To, czego chcę, to to, że po pobraniu pliku wyszuka, czy jakaś aplikacja jest dostępna do otwarcia pliku, bo wyświetli się pop-up. Robię to wszystko wewnątrz fragmentu. Oto mój kod do pobrania:Jak otworzyć pobrany plik w Androidzie z domyślną aplikacją dostępną w Androidzie
public class DownloadFile extends AsyncTask<String, Void, Integer> {
String file_name = "";
File sdcard = Environment.getExternalStorageDirectory();
@Override
protected Integer doInBackground(String... params) {
// TODO Auto-generated method stub
try {
HttpURLConnection url_conn = null;
byte[] bffr;
long totalSize = 0;
File directory = new File(
Environment.getExternalStorageDirectory()
+ "/xyz/download");
directory.mkdirs();
// 06-03 17:57:41.160: D/file name(6882):
file_name = "";
file_name = params[0];
Log.d("file name", file_name.toString());
url_conn = (HttpURLConnection) (new URL("http://example.com/uploads/" + file_name)).openConnection();
url_conn.setRequestMethod("GET");
url_conn.setDoOutput(true);
url_conn.connect();
if (url_conn.getContentLength() > 0) {
File imgFile = new File(sdcard + "/xyz/download/",file_name);
FileOutputStream fos = new FileOutputStream(imgFile);
InputStream is = url_conn.getInputStream();
totalSize = url_conn.getContentLength();
// Log.d("File Download Size ",totalSize+"");
long total = 0;
bffr = new byte[1024];
int bufferLength = 0;
while ((bufferLength = is.read(bffr)) > 0) {
total += bufferLength;
publishProgress("" + (int) ((total * 100)/totalSize));
fos.write(bffr, 0, bufferLength);
}
fos.close();
} else
Log.w(file_name.toString(), "FILE NOT FOUND");
return 0;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
private void publishProgress(String... process) {
// TODO Auto-generated method stub
mprogressDialog.setProgress(Integer.parseInt(process[0]));
}
protected void onPostExecute(Integer unused) {
Log.d("after downloading file ", "file downloaded ");
switch (unused) {
case 0:
mprogressDialog.dismiss();
Intent install = new Intent(Intent.ACTION_VIEW);
install.setDataAndType(Uri.fromFile(new File(sdcard + "/xyz/download/",file_name)),
"MIME-TYPE");
install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
app.getBaseContext().startActivity(install);
break;
}
}
}
W poście execute Próbowałem go otworzyć za pomocą Intent, ale to nie działało. Każdy pomysł jest doceniana