2014-01-24 2 views
2

У меня возник вопрос о загрузке pdf-файла и его открытии с помощью приложения для чтения PDF, установленного на телефоне. Я новичок в android и работаю, но встал на эту часть.Android открыть загруженный файл

Так что у меня есть сейчас: У меня есть активность, которая на данный момент начинает загружать PDF-файл и пытается открыть с намерением. Пока все статично, поэтому у меня есть заданный url.

private void DownloadFile(){ 
     DownloadManager downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE); 
     Uri Download_Uri = Uri.parse("http://awebiste.adomain/afile.pdf"); 
     DownloadManager.Request request = new DownloadManager.Request(Download_Uri); 

     request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);  
     request.setAllowedOverRoaming(false); 
     request.setTitle("My Data Download"); 
     request.setDescription("Android Data download using DownloadManager."); 
     request.setDestinationInExternalFilesDir(this,Environment.DIRECTORY_DOWNLOADS,"test.pdf"); 

     Long downloadReference = downloadManager.enqueue(request); 

     if (downloadReference != null){ 
      Intent target = new Intent(Intent.ACTION_VIEW); 
      target.setDataAndType(Uri.parse(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + "/test.pdf"), "application/pdf"); 
      target.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

      Log.v("OPEN_FILE_PATH", getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + "/test.pdf"); 

      startActivity(target); 

     } else { 
      //TODO something went wrong error 
     } 
    } 

Теперь файл загружается и сохраняется в папке приложения под /storage.sdcard0/Android/data/<application>/files/download и из браузера документов файл может быть opent. Но когда я использую намерение на кнопке моего кода, я получаю тост, что файл не может быть открыт. После некоторого поиска в google я думаю, что это проблема разрешения, потому что эти файлы являются приватными для приложения. Итак, как я могу сделать эти файлы общедоступными?

+0

вчера я ответил на аналогичный вопрос, который может помочь (хотя я озадачен, как вы можете прочитать файл, используя браузер документов, поскольку он должен быть закрыт для вашего приложения): http://stackoverflow.com/questions/21304489/how-to-open-private-files-saved-to-the-internal-storage-using -intent-action-view/21305564 # 21305564 – NigelK

+0

К сожалению, у меня такая же проблема после внедрения вашего решения. – Msmit1993

+0

Refer My Answer in other thread - здесь http://stackoverflow.com/questions/7239996/android-downloadmanager-api-opening-file-after-download/40925445#40925445 – Vasanth

ответ

1

Вот как я сделал это после долгого дня поиска, Ваш код помог мне немного решить:

String name; 
DownloadManager mManager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.show_interview); 
    Button down = (Button) findViewById(R.id.download); 
    down.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      down(); 

     } 
    }); 

} 

public void down() { 
    mManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
    Uri downloadUri = Uri.parse(DOWNLOAD_FILE); 
    DownloadManager.Request request = new DownloadManager.Request(
      downloadUri) 
      .setAllowedOverRoaming(false) 
      .setTitle("Downloading") 
      .setDestinationInExternalPublicDir(
        Environment.DIRECTORY_DOWNLOADS, name + "CV.pdf") 
      .setDescription("Download in progress").setMimeType("pdf"); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    IntentFilter intentFilter = new IntentFilter(
      DownloadManager.ACTION_DOWNLOAD_COMPLETE); 
    registerReceiver(broadcast, intentFilter); 
} 

public void showPdf() { 
    try { 
     File file = new File(Environment.getExternalStorageDirectory() 
       + "/Download/" + name + "CV.pdf");//name here is the name of any string you want to pass to the method 
     if (!file.isDirectory()) 
      file.mkdir(); 
     Intent testIntent = new Intent("com.adobe.reader"); 
     testIntent.setType("application/pdf"); 
     testIntent.setAction(Intent.ACTION_VIEW); 
     Uri uri = Uri.fromFile(file); 
     testIntent.setDataAndType(uri, "application/pdf"); 
     startActivity(testIntent); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

BroadcastReceiver broadcast = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     showPdf(); 
    } 
}; 
Смежные вопросы