2017-07-13 4 views
0

タブビューのレイアウトに2つの断片があります。私はWebView()とDownloadManager()を使ってファイルをダウンロードしています。私のファイルは完全にダウンロードされていますが、ダウンロードしたファイルには元のファイル名はありません。これは私の問題です。元のファイル名を取得するにはどうすればよいですか?ここでDownloadManagerからダウンロードしたファイル名を取得する方法

は私がダウンロードマネージャを使用しています私の断片である...私はこの問題のために、ここでいくつかのコードを発見し、それらのどれも私を助けていない:

public class Download extends Fragment { 
    View v; 
    WebView webView2; 
    SwipeRefreshLayout mySwipeRefreshLayout; 
    DownloadManager downloadManager; 

    public String currentUrl = ""; 
    String myLink = ""; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     v = inflater.inflate(R.layout.download, container, false); 
     mySwipeRefreshLayout = (SwipeRefreshLayout) v.findViewById(R.id.swiperefresh); 
     webView2 = (WebView) v.findViewById(R.id.webView_download); 

     int permissionCheck = ContextCompat.checkSelfPermission(getContext(), 
      Manifest.permission.WRITE_EXTERNAL_STORAGE); 

     webView2.setInitialScale(1); 
     webView2.getSettings().setJavaScriptEnabled(true); 
     webView2.getSettings().setLoadWithOverviewMode(true); 
     webView2.getSettings().setUseWideViewPort(true); 
     webView2.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
     webView2.setScrollbarFadingEnabled(false); 
     webView2.setVerticalScrollBarEnabled(false); 
     webView2.loadUrl(currentUrl); 
     webView2.setWebViewClient(new WebViewClient()); 
     webView2.getSettings().setBuiltInZoomControls(true); 
     webView2.getSettings().setUseWideViewPort(true); 
     webView2.getSettings().setLoadWithOverviewMode(true); 
     webView2.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
     webView2.setOnTouchListener(new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       return (event.getAction() == MotionEvent.ACTION_MOVE); 
      } 
     }); 

     if (permissionCheck == PackageManager.PERMISSION_GRANTED) { 
      Bundle bundle = getArguments(); 

      if (bundle != null) { 
       String value = getArguments().getString("link"); 
       myLink = value; 
       webView2.loadUrl(myLink); 
      } 

      webView2.setDownloadListener(new DownloadListener() { 
       public void onDownloadStart(String url, String userAgent, 
              String contentDisposition, String mimetype, 
              long contentLength) { 
        Intent i = new Intent(Intent.ACTION_VIEW); 
        i.setData(Uri.parse(url)); 

        downloadManager = (DownloadManager) getContext().getSystemService(Context.DOWNLOAD_SERVICE); 
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); 
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "Youtube_Video" + ".mp4"); 
        request.allowScanningByMediaScanner(); 
        Long reference = downloadManager.enqueue(request); 

        Toast.makeText(getContext(), "Downloading...", Toast.LENGTH_LONG).show(); 
       } 
      }); 
     } else { 
      requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
     } 

     return v; 
    } 
} 

答えて

0

HTTPは、一般的に、別のファイル名が含まれていません。 。

String filename = currentUrl.substring(currentUrl.lastIndexOf('/') + 1); 

し、その後にそれを渡します:あなたは、例えば、最後のスラッシュの後にすべてを取る、URLパスにファイル名を使用することができ、ファイル名がある場合

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename); 

しかしヘッダーであります別のHEAD要求がトリックを行います(this answer参照)。

+0

"watch?v = ZtgD9f0xPuU"のようにダウンロードしたファイル名は...今はexectの名前 –

+0

その情報はどこから来たのですか? – crazyhatfish

+0

私はYouTubeからダウンロードしたい... –

関連する問題