标签: android-download-manager

如何从webview Android下载文件?

我的下面的代码很好地加载了网页,当我点击下载链接搜索一首歌后,它崩溃了.关于如何让下载管理器使用webview,没有太多的教程.我究竟做错了什么?

import java.io.File;
import android.app.Activity;
import android.app.DownloadManager;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class List1 extends Activity {

        WebView ourBrow;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Use a custom layout file
        setContentView(R.layout.list1);

        final DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);

     final File destinationDir = new File (Environment.getExternalStorageDirectory(), getPackageName());
     if (!destinationDir.exists()) {
         destinationDir.mkdir(); // Don't forget to make the directory if it's not there
     }

        ourBrow = (WebView) findViewById(R.id.wvBrowser);
        ourBrow.getSettings().setJavaScriptEnabled(true);
        ourBrow.setInitialScale(50); 
        ourBrow.getSettings().setUseWideViewPort(true); 
        ourBrow.setVerticalScrollBarEnabled(false);
        ourBrow.setHorizontalScrollBarEnabled(false); …
Run Code Online (Sandbox Code Playgroud)

android webview android-download-manager

11
推荐指数
1
解决办法
3万
查看次数

如何暂停和恢复DownloadManager

我知道这个问题是重复的,我没有得到自满的答案.我正在使用Android系统DownloadManager从网络下载文件,它可以正常下载文件.

 private DownloadManager downloadManager;
 Button start;
 Button pause;
 Button resume;
Run Code Online (Sandbox Code Playgroud)

初始化上面的所有按钮

downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
Uri Download_Uri = Uri
                .parse("uri");
DownloadManager.Request request = new DownloadManager.Request(
                Download_Uri);
Run Code Online (Sandbox Code Playgroud)

然后它已被放入下载队列.当转弯即将开始下载

我的问题是,是否有任何简单的方法来暂停下载和恢复下载

downloadManager.pause();
downloadManager.resume();
Run Code Online (Sandbox Code Playgroud)

提前致谢.

android download android-download-manager

11
推荐指数
0
解决办法
1万
查看次数

不推荐使用DownloadManager COLUMN_LOCAL_FILENAME

在Android N上,我得到一个例外.根据文档,这是一个已知问题,它要求我使用ContentResolver.openFileDescriptor()

https://developer.android.com/reference/android/app/DownloadManager.html#COLUMN_LOCAL_FILENAME

我不知道该怎么用.这里的ContentResolver对象在哪里可以用来获取文件名?我从来没用过它.所以,我将不胜感激任何帮助.

08-04 11:20:59.765 7010 7290 W System.err:java.lang.SecurityException:不推荐使用COLUMN_LOCAL_FILENAME; 请改用ContentResolver.openFileDescriptor()

08-04 11:20:59.765 7010 7290 W System.err:在android.app.DownloadManager $ CursorTranslator.getString(DownloadManager.java:1499)

这是我的代码.

    DownloadManager.Query query = new DownloadManager.Query();
    query.setFilterById(id);
    Cursor cursor = downloadManager.query(query);

    final String downloadFilePath = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
    cursor.close();
Run Code Online (Sandbox Code Playgroud)

我尝试了downlaodManager.getFileUri,但不是我想要的.感谢任何帮助.

谢谢

android android-download-manager

11
推荐指数
2
解决办法
6313
查看次数

下载管理器Android权限错误:写入外部存储

我编写了一个Android应用程序,使用DownloadManager将示例PDF文件下载到下载目录.这是代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_vertretungsplan);
    Button dlbutton = (Button) findViewById(R.id.buttondownload);
    final Context c = this;
    dlbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(myurl));
            request.setTitle("Vertretungsplan");
            request.setDescription("wird heruntergeladen");
            request.allowScanningByMediaScanner();
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            String filename = URLUtil.guessFileName(myurl, null, MimeTypeMap.getFileExtensionFromUrl(myurl));
            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename);
            DownloadManager manager = (DownloadManager) c.getSystemService(Context.DOWNLOAD_SERVICE);
            manager.enqueue(request);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

现在,我尝试在我的Xperia Z3 Android 6.0上从Android Studio调试运行它.当我点击下载按钮时,会发生以下错误:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.markwitt.schul_app, PID: 29297
              java.lang.SecurityException: No permission to write to /storage/emulated/0/Download/hrpsampletable.pdf: Neither user 10047 nor current …
Run Code Online (Sandbox Code Playgroud)

xml android android-manifest android-permissions android-download-manager

11
推荐指数
2
解决办法
1万
查看次数

Android:DownloadManager和COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED

我正在尝试正确解决禁用下载管理器.我能找到的最佳信息是如何启用Android下载管理器.

PackageManager.COMPONENT_ENABLED_STATE_DISABLEDPackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER对我来说,状态是可以理解的.

但经过一小时的谷歌搜索,我仍然感到困惑PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED.

文件如下:

仅适用于setApplicationEnabledSetting(String,int,int)的标志:应考虑此应用程序,直到用户实际想要使用它为止.这意味着它通常不会显示给用户(例如在启动器中),但是用户界面的各个部分可以使用GET_DISABLED_UNTIL_USED_COMPONENTS仍然可以看到它并允许用户选择它(例如IME,设备管理员)等).一旦用户选择了应用程序,此类代码也应在此时启用.此选项当前不能与setComponentEnabledSetting(ComponentName,int,int)一起使用.

这是否意味着我应该将此状态视为已启用?

用户如何选择 DownloadManager?它怎么能出现

android android-package-managers android-download-manager

11
推荐指数
1
解决办法
222
查看次数

FileProvider无法使用找不到包含的已配置根目录

我正在尝试使用FileProvider方式在Android上轻松下载和共享PDF文件以供其他PDF阅读器应用程序(DropBox,Drive PDF Reader或Adobe Reader)阅读.

但是,我一直得到以下异常:

Failed to find configured root that contains /storage/emulated/0/Android/data/com.my.app/files/docs/my_file_name.pdf
Run Code Online (Sandbox Code Playgroud)

我首先将URL发送到Android DownloadManager以执行下载,然后使用BroadcastReceiver

我的实施如下:

file_paths.xml

<paths>

    <external-files-path
        name="my_docs"
        path="docs" />

</paths>
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml中

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">

    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />

</provider>
Run Code Online (Sandbox Code Playgroud)

从MainActivity:

public void downloadFile(String urlString) {
    Uri uri = Uri.parse(urlString);

    String filename = "my_file_name.pdf";

    DownloadManager.Request request = new DownloadManager.Request(uri);
    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);

    request.setTitle("App is Downloading a File");
    request.setDescription("Downloading PDF File For App");

    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
    request.setDestinationInExternalFilesDir(mContext, "docs", filename);

    request.allowScanningByMediaScanner();

    mDownloadManager.enqueue(request);
}
Run Code Online (Sandbox Code Playgroud)

最后来自我的自定义BroadcastReceiver:

uriStringcursor.getString(uriIndex)采用 …

android android-download-manager android-fileprovider

11
推荐指数
1
解决办法
3210
查看次数

我们可以打开下载文件夹吗?意图?

实际上,我需要从我的应用程序中打开默认的Download文件夹.可能吗?如果是,那么请提供一些参考.

我可以通过以下方式获取Download文件夹的路径:

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

android android-intent android-download-manager

10
推荐指数
2
解决办法
8862
查看次数

DownloadManager IllegalStateException在DIRECTORY_DOWNLOADS中创建下载

首先,关于这个问题有很多问题,但没有一个反映我的问题.我有例如读这个这个.

我遇到的问题是,在少数情况下,我的函数setDestinationInExternalPublicDir导致以下堆栈跟踪:

Fatal Exception: java.lang.RuntimeException: Unable to start receiver com.onlinetvrecorder.otrapp2.listeners.DownloadUpdateReceiver: java.lang.IllegalStateException: Unable to create directory: /mnt/sdcard/Download
       at android.app.ActivityThread.handleReceiver(ActivityThread.java:2274)
       at android.app.ActivityThread.access$1500(ActivityThread.java:131)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1272)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:137)
       at android.app.ActivityThread.main(ActivityThread.java:4791)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:511)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
       at dalvik.system.NativeStart.main(NativeStart.java)
Caused by java.lang.IllegalStateException: Unable to create directory: /mnt/sdcard/Download
       at android.app.DownloadManager$Request.setDestinationInExternalPublicDir(DownloadManager.java:496)
       at com.myapp.Utils.download(SourceFile:752)
       at com.myapp.Receiver.onReceive(SourceFile:20)
       at android.app.ActivityThread.handleReceiver(ActivityThread.java:2267)
       at android.app.ActivityThread.access$1500(ActivityThread.java:131)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1272)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:137)
       at android.app.ActivityThread.main(ActivityThread.java:4791)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:511)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) …
Run Code Online (Sandbox Code Playgroud)

android android-download-manager

10
推荐指数
1
解决办法
4186
查看次数

DownloadManager无法使用Pie下载到三星的外部存储上

在Android 9(Pie)上的Samsung Galaxy S9和S9 +上,使用Android DownloadManager将文件下载到外部存储失败。

下载适用于具有Android 8的三星设备或具有Android 9(例如Pixel 2)的其他设备

我已将以下权限添加到清单中:

 "android.permission.WRITE_EXTERNAL_STORAGE", 
 "android.permission.READ_EXTERNAL_STORAGE",
 "android.permission.INTERNET"
Run Code Online (Sandbox Code Playgroud)

我还已在运行时请求READ / WRITE_EXTERNAL_STORAGE权限。

文件路径是:/storage/4295-DDD5/Android/data/com.example.myapplication/files/filename.file 并且该文件路径 存在,我已经使用AndroidStudio的设备文件资源管理器创建了它

创建下载的方法:

public void downloadFile(String url, String filePath) {
   DownloadManager mDownloadManager = 
   (DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE);

   DownloadManager.Request request = new 
   DownloadManager.Request(Uri.parse(url));

   request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | 
   DownloadManager.Request.NETWORK_WIFI);

   request.setVisibleInDownloadsUi(true);

   request.setDestinationUri(Uri.parse("file://" + filePath));

   mDownloadManager.enqueue(request);
}
Run Code Online (Sandbox Code Playgroud)

预期的结果是将指定文件从url下载到filePath,而不是在日志中出现以下错误:

D/DownloadManager: [8616] Starting com.example.myapplication
W/DownloadManager: [8616] Stop requested with status FILE_ERROR: Failed to generate filename: java.io.IOException: Permission denied
D/DownloadManager: [8616] Finished with status WAITING_TO_RETRY
V/DownloadManager: MIME Type = application/octet-stream
I/DownloadManager: Download 8616 …
Run Code Online (Sandbox Code Playgroud)

android android-download-manager android-external-storage samsung-galaxy android-9.0-pie

10
推荐指数
1
解决办法
773
查看次数

BroadcastReceiver onReceive()被调用两次

在我的应用程序中,我使用DownloadManager来下载PDF,它在下载完成后通过BroadcastReceiver通知应用程序.我的问题是BroadcastReceiver的onReceive()方法被调用两次.代码如下:

在我的列表适配器中,运行for循环以下载所选的pdf.下载代码写在另一个类中,如下所示:

    public static void downloadCheat(final SherlockFragmentActivity activity, final String cheatName, String pathOnServer){

    Request request = new Request(
            Uri.parse(ApplicationConstants.CHEAT_DOWNLOAD_SERVER_URL
                    + "/" + pathOnServer + cheatName + ".pdf"));

    if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) {
        request.setShowRunningNotification(true);
    }
    else {
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
    }

    final DownloadManager dm = (DownloadManager) activity
            .getSystemService(Context.DOWNLOAD_SERVICE);
    final long enqueue = dm.enqueue(request);

    BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            long i = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
            System.out.println(i);
            if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
                Query query = new …
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver android-download-manager

9
推荐指数
1
解决办法
7937
查看次数