2015-06-01 2 views
2

У меня есть загружаемая ссылка примерно https://drive.google.com/uc?id=0Bw6vr2LNxB3iUFJrTk5oZDljaTA&export=download, которая работает только в браузере.загрузить загружаемую ссылку в браузере в android

если я открыть ссылку с помощью мобильного браузера, используя этот

Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
         intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
         startActivity(intent); 

Затем он автоматически загрузить файл.

Можно ли загрузить файл с помощью веб-браузера, а не браузера по умолчанию?

я пытался что-то вроде этого

public class showDownload extends Activity { 
private WebView webView; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.show_download); 


    Bundle extras = getIntent().getExtras(); 

    if (extras.getString("url") != null) { 
    //DO SOMETHING 

     String url=extras.getString("url"); 
     Toast.makeText(getApplicationContext(), "__", Toast.LENGTH_SHORT).show(); 

     webView = (WebView) findViewById(R.id.webView1); 
     webView.loadUrl(url); 
     webView.setDownloadListener(new DownloadListener() {    
       public void onDownloadStart(String url, String userAgent, 
         String contentDisposition, String mimetype, 
         long contentLength) { 
     Request request = new Request(
            Uri.parse(url)); 
     Toast.makeText(getApplicationContext(), " Yesssss", Toast.LENGTH_SHORT).show(); 
          request.allowScanningByMediaScanner(); 
          request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
          request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "download"); 
          DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
          dm.enqueue(request);   

       } 
      }); 

    } 

    } 

}

I усталой много, но не могу получить какое-либо решение? Может ли кто-нибудь помочь мне решить эту проблему?

ответ

0

Если вы хотите иметь, как менеджер загрузки приложений, обратитесь к этому сообщению. Предоставляет вам подробную информацию о различных вариантах загрузки. https://stackoverflow.com/a/3028660

+0

Если я передать URL в мой браузер или мой мобильный браузер, то он автоматически загружает файл. Я не хочу открывать любой браузер, поэтому я хочу загрузить файл с помощью webview. Является ли это возможным ? @siris_cac – DarkenShooter

+0

Вы прочитали ответ, который я связал выше? – siriscac

0

Я не мог проверить, какой загрузить ссылку это, но мы здесь есть два варианта, если вы хотите, чтобы загрузить файл с помощью WebView -

  1. DownloadManagerthis link
  2. DownloadListenerthis link

Я проверю их обоих и вернусь к вам, до этого вы можете начать с DownloadListener сначала, так как у меня есть использовал его раньше, и он работал хорошо.

mWebView.setDownloadListener(new DownloadListener() { 
     public void onDownloadStart(String url, String userAgent, 
       String contentDisposition, String mimetype, 
       long contentLength) { 
Request request = new Request(
          Uri.parse(url)); 
        request.allowScanningByMediaScanner(); 
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "download"); 
        DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
        dm.enqueue(request);   

     } 
    }); 
+0

Пользователь не будет нажимать нигде в webView. Я просто передаю url в webview, тогда он автоматически загрузит файл, который я хочу. Но при использовании пользователя ur link необходимо открыть браузер и вернуться обратно в приложение, не закрывая его. @Darpan – DarkenShooter

+0

Я некоторое время обновил свой код, сначала установил 'Log' в' DownloadListener', чтобы вы могли проверить, что ваш 'webView' способен поймать эту загрузку. Если да, то вы можете продолжить мой обновленный код, если ответ «нет», а затем я обновлю другую альтернативу. – Darpan

+0

Но ему нужно открыть браузер, который я не хочу @Darpan – DarkenShooter

0

на вашей кнопки мыши материал

String URL = "https://drive.google.com/uc?id=0Bw6vr2LNxB3iUFJrTk5oZDljaTA&export=download"; 

//check if your device is marshmallow that need runtime permission 
return(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP_MR1); 

String[] perms = {"android.permission.WRITE_EXTERNAL_STORAGE"}; 
int permsRequestCode = 200; 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
    requestPermissions(perms, permsRequestCode); 
} 

и называют onRequestPermissionsResult методом

@Override 
public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){ 

    switch(permsRequestCode){ 

     case 200: 

      boolean writeAccepted = grantResults[0]== PackageManager.PERMISSION_GRANTED; 

      //if user click allow, it will start downloading the file from URL 
      if (writeAccepted) { 
       new DownloadTask(MainActivity.this, URL); 
      } else { 
       Toast.makeText(MainActivity.this, "you have no permission!", Toast.LENGTH_LONG).show(); 
      } 


      break; 

    } 

} 

Теперь создадим класс Java под названием DownloadTask.java

import android.app.ProgressDialog; 
import android.content.ActivityNotFoundException; 

import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.AsyncTask; 
import android.os.Environment; 
import android.os.Handler; 
import android.util.Log; 
import android.widget.Toast; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Random; 


public class DownloadTask { 

    private static final String TAG = "Download Task"; 
    private Context context; 

    private String downloadUrl = "", downloadFileName = ""; 
    private ProgressDialog progressDialog; 

    public DownloadTask(Context context, String downloadUrl) { 
     this.context = context; 

     this.downloadUrl = downloadUrl; 


     downloadFileName = "yourfilename_" + uploadDate() + rand() + ".pdf"; //Create file name by picking download file name from URL 
     Log.e(TAG, downloadFileName); 

     //Start Downloading Task 
     new DownloadingTask().execute(); 
    } 

    private String uploadDate() { 
     Calendar c = Calendar.getInstance(); 

     SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd"); 
     String formattedDate = df.format(c.getTime()); 

     return formattedDate; 
    } 

    private String rand() { 
     Random random = new Random(); 
     return String.format("%09d", random.nextInt(10000000)); 
    } 

    private class DownloadingTask extends AsyncTask<Void, Void, Void> { 

     File apkStorage = null; 
     File outputFile = null; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      progressDialog = new ProgressDialog(context); 
      progressDialog.setMessage("Please wait..."); 
      progressDialog.show(); 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      try { 
       if (outputFile != null) { 
        progressDialog.dismiss(); 
        Toast.makeText(context, "Download successful!", Toast.LENGTH_SHORT).show(); 

        //this is to view the downloaded file 
        File pdfFile = new File(Environment.getExternalStorageDirectory() + "/" + "yourfoldername" + "/" + downloadFileName); 
        Uri path = Uri.fromFile(pdfFile); 
        Intent pdfIntent = new Intent(Intent.ACTION_VIEW); 
        pdfIntent.setDataAndType(path, "application/pdf"); 
        pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

        try{ 
         context.startActivity(pdfIntent); 
        }catch(ActivityNotFoundException e){ 
         Toast.makeText(context, "no apps can read the file", Toast.LENGTH_SHORT).show(); 
        } 

       } else { 

        new Handler().postDelayed(new Runnable() { 
         @Override 
         public void run() { 
          Toast.makeText(context, "Download failed. Please try again!", Toast.LENGTH_SHORT).show(); 
         } 
        }, 3000); 

        Log.e(TAG, "Download Failed"); 

       } 
      } catch (Exception e) { 
       e.printStackTrace(); 

       //Change button text if exception occurs 

       new Handler().postDelayed(new Runnable() { 
        @Override 
        public void run() { 

        } 
       }, 3000); 
       Log.e(TAG, "Download Failed with Exception - " + e.getLocalizedMessage()); 

      } 


      super.onPostExecute(result); 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      try { 
       URL url = new URL(downloadUrl);//Create Download URl 
       HttpURLConnection c = (HttpURLConnection) url.openConnection();//Open Url Connection 
       c.setRequestMethod("GET");//Set Request Method to "GET" since we are grtting data 
       c.connect();//connect the URL Connection 

       //If Connection response is not OK then show Logs 
       if (c.getResponseCode() != HttpURLConnection.HTTP_OK) { 
        Log.e(TAG, "Server returned HTTP " + c.getResponseCode() 
         + " " + c.getResponseMessage()); 

       } 


       //Get File if SD card is present 
       if (new CheckForSDCard().isSDCardPresent()) { 

        apkStorage = new File(
         Environment.getExternalStorageDirectory() + "/" 
           + "yourfoldername"); 
       } else 
        Toast.makeText(context, "Oops!! There is no SD Card.", Toast.LENGTH_SHORT).show(); 

       //If File is not present create directory 
       if (!apkStorage.exists()) { 
        apkStorage.mkdir(); 
        Log.e(TAG, "Directory Created."); 
       } 

       outputFile = new File(apkStorage, downloadFileName);//Create Output file in Main File 

       //Create New File if not present 
       if (!outputFile.exists()) { 
        outputFile.createNewFile(); 
        Log.e(TAG, "File Created"); 
       } 

       FileOutputStream fos = new FileOutputStream(outputFile);//Get OutputStream for NewFile Location 

       InputStream is = c.getInputStream();//Get InputStream for connection 

       byte[] buffer = new byte[1024];//Set buffer type 
       int len1 = 0;//init length 
       while ((len1 = is.read(buffer)) != -1) { 
        fos.write(buffer, 0, len1);//Write new file 
       } 

       //Close all connection after doing task 
       fos.close(); 
       is.close(); 

      } catch (Exception e) { 

       //Read exception if something went wrong 
       e.printStackTrace(); 
       outputFile = null; 
       Log.e(TAG, "Download Error Exception " + e.getMessage()); 
      } 

      return null; 
     } 
    } 
} 
Смежные вопросы