我的下面的代码很好地加载了网页,当我点击下载链接搜索一首歌后,它崩溃了.关于如何让下载管理器使用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系统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 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应用程序,使用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
我正在尝试正确解决禁用下载管理器.我能找到的最佳信息是如何启用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?它怎么能出现?
我正在尝试使用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:
uriString是cursor.getString(uriIndex)采用 …
实际上,我需要从我的应用程序中打开默认的Download文件夹.可能吗?如果是,那么请提供一些参考.
我可以通过以下方式获取Download文件夹的路径:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
首先,关于这个问题有很多问题,但没有一个反映我的问题.我有例如读这个和这个.
我遇到的问题是,在极少数情况下,我的函数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 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
在我的应用程序中,我使用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)