2015-07-13 20 views
5

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

Odpowiedz

5
File file = new File(filePath); 
    MimeTypeMap map = MimeTypeMap.getSingleton(); 
    String ext = MimeTypeMap.getFileExtensionFromUrl(file.getName()); 
    String type = map.getMimeTypeFromExtension(ext); 

    if (type == null) 
     type = "*/*"; 

    Intent intent = new Intent(Intent.ACTION_VIEW); 
    Uri data = Uri.fromFile(file); 

    intent.setDataAndType(data, type); 

    startActivity(intent); 

Zobacz this zbyt ..

0

Podejrzewam, że musisz przekazać prawidłowy typ mime, aby uzyskać wyskakujące okno wyboru aplikacji. możesz pobrać mimeType z nazwy pliku lub instancji pliku.

String fileName = "/path/to/file"; 
MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap(); 

// only by file name 
String mimeType = mimeTypesMap.getContentType(fileName); 

źródło https://stackoverflow.com/a/1902146/942224

0

Po pobraniu zrobić this--

MimeTypeMap myMime = MimeTypeMap.getSingleton(); 
    Intent newIntent = new Intent(Intent.ACTION_VIEW); 
    String mimeType = myMime.getMimeTypeFromExtension(fileExt(path).substring(1)); 
    newIntent.setDataAndType(Uri.fromFile(new File(path)), mimeType); 
    newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    try { 
     ReadMailActivity.this.startActivity(newIntent); 
    } catch (ActivityNotFoundException e) { 
     Toast.makeText(ReadMailActivity.this, "No handler for this type of file.", Toast.LENGTH_LONG).show(); 
    } 
Powiązane problemy