关于android下载管理器的小问题.这是我第一次使用它并成功下载了多个文件并打开了它们.但我的问题是如何检查下载是否完成.
情况是我下载一个PDF文件并打开它,通常文件很小,它在打开之前完成.但是如果文件有点大,我如何在打开之前检查下载管理器是否完成了下载.
我如何下载:
Intent intent = getIntent();
DownloadManager downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
Uri Download_Uri = Uri.parse(intent.getStringExtra("Document_href"));
DownloadManager.Request request = new DownloadManager.Request(Download_Uri);
//Restrict the types of networks over which this download may proceed.
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
//Set whether this download may proceed over a roaming connection.
request.setAllowedOverRoaming(false);
//Set the title of this download, to be displayed in notifications.
request.setTitle(intent.getStringExtra("Document_title"));
//Set the local destination for the downloaded file to a path within the application's external files directory
request.setDestinationInExternalFilesDir(this,Environment.DIRECTORY_DOWNLOADS,intent.getStringExtra("Document_title") + ".pdf");
//Enqueue a new …Run Code Online (Sandbox Code Playgroud) 我正在使用Android下载管理器下载文件列表.最近我遇到了一份崩溃报告说
Unknown java.lang.IllegalArgumentException: Unknown URL content://downloads/my_downloads
然后,我想通了,原因是因为用户禁用了Android下载管理器.我通过使用以下代码检查下载管理器的包名来检查是否已禁用下载管理器.
int state = this.getPackageManager().getApplicationEnabledSetting("com.android.providers.downloads");
Run Code Online (Sandbox Code Playgroud)
现在,我需要找到一种方法来启用下载管理器,如果它被禁用.我尝试使用Manifest中的权限设置它的启用状态但我一直得到安全异常.
this.getPackageManager().setApplicationEnabledSetting("com.android.providers.downloads", PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
Run Code Online (Sandbox Code Playgroud)
所以我认为它可能无法访问,因为它是一个系统应用程序.(谷歌Play应用程序).
有没有办法将用户重定向到下载管理器应用程序信息视图?让用户启用它?如果无法以编程方式在运行时启用它.
android android-package-managers android-download-manager android-settings
由于我是 Android 开发的新手,我正在尝试使用 DownloadManager 来简化应用程序。
这是代码
public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback{
Button btn;
private long referenceID;
private DownloadManager downloadManager;
private static final int PERMISSION_REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if (checkPermission())
{
/*** If Storage Permission Is Given, Check External storage is available for read and write***/
Uri image_uri = Uri.parse("https://unifiedclothes.com/Unifiedclothes/App_Gallery/thumb_8_121432471036-1432471036-SC-505.jpg");
referenceID = DownloadImage(image_uri);
} else {
requestPermission(); …Run Code Online (Sandbox Code Playgroud) 我正在使用Download Manger下载一些多媒体文件并对其进行分类.我也在使用Crashlytics,这是一个错误,我经常在不同的设备和Android版本上得到它.我正在寻找你的解决方案/建议!
java.lang.IllegalArgumentException: Unknown URL content://downloads/my_downloads
at android.content.ContentResolver.insert(ContentResolver.java:862)
at android.app.DownloadManager.enqueue(DownloadManager.java:1252)
at com.myapp.LessonFragment$DownloadClickListener.onClick(SourceFile:570)
at android.view.View.performClick(View.java:4262)
at android.view.View$PerformClick.run(View.java:17351)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
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:1038)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
at dalvik.system.NativeStart.main(NativeStart.java)
Run Code Online (Sandbox Code Playgroud)
您可以在下面看到我的代码:
private class DownloadClickListener implements View.OnClickListener {
@Override
public void onClick(View view) {
// Check if download manager available before request
if (!DownloadHelper.isDownloadManagerAvailable(getActivity())) {
// Build custom alert dialog
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.download_manager_disabled);
builder.setCancelable(false);
builder.setPositiveButton(R.string.ok, (dialog, which) -> {
dialog.dismiss();
});
// Create and …Run Code Online (Sandbox Code Playgroud) 我的Android应用程序中有一个要求.我需要以编程方式下载并保存SD卡特定文件夹中的文件.我开发了源代码,这是
String DownloadUrl = "http://myexample.com/android/";
String fileName = "myclock_db.db";
DownloadDatabase(DownloadUrl,fileName);
// and the method is
public void DownloadDatabase(String DownloadUrl, String fileName) {
try {
File root = android.os.Environment.getExternalStorageDirectory();
File dir = new File(root.getAbsolutePath() + "/myclock/databases");
if(dir.exists() == false){
dir.mkdirs();
}
URL url = new URL("http://myexample.com/android/");
File file = new File(dir,fileName);
long startTime = System.currentTimeMillis();
Log.d("DownloadManager" , "download url:" +url);
Log.d("DownloadManager" , "download file name:" + fileName);
URLConnection uconn = url.openConnection();
uconn.setReadTimeout(TIMEOUT_CONNECTION);
uconn.setConnectTimeout(TIMEOUT_SOCKET);
InputStream is = uconn.getInputStream();
BufferedInputStream bufferinstream = new …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,您可以下载一些文件 我使用Android DownloadManager类进行下载.下载完成后,它会显示一条消息,说明该文件已下载.问题是,可能同时有2,3或4次下载.我的BroadcastReceiver代码看起来像这样:
receiver_complete = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE) ){
Toast.makeText(MainActivity.this, MainActivity.this.getString(R.string.download_finished, "Here should be the name", Toast.LENGTH_SHORT).show();
}
}
};
Run Code Online (Sandbox Code Playgroud)
如何获取完成下载的当前文件名?
非常感谢你.
java android broadcastreceiver receiver android-download-manager
我正在使用DownloadManager在我的应用程序中下载一堆文件.我无法弄清楚如何取消downloadManager排队的下载.
有两种可能性:a.用户可以通过在通知栏中单击它来手动取消它.湾 取消并通过代码删除下载.
我定义了以下接收器.
<receiver
android:name=".DownloadStatusReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
<action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
并在接收器中
if (DownloadManager.ACTION_NOTIFICATION_CLICKED.equals(action)) {
Constants.showLog(TAG, "Notification clicked");
long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
DownloadManager dm =(DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE);
dm.remove(downloadId);
}
Run Code Online (Sandbox Code Playgroud)
任何见解?
用户可以在"数据使用"屏幕上定义移动数据使用的限制和/或警告限制.那么如何通过代码获取此信息呢?
本机操作系统的数据使用配置屏幕.

我想要极限值和警告值.
我已经尝试过但不能正常工作并且总是向两者返回NULL:
final Long recommendedBytes = DownloadManager.getRecommendedMaxBytesOverMobile( this.context );
final Long maximumBytes = DownloadManager.getMaxBytesOverMobile( this.context );
// recommendedBytes and maximumBytes are NULL
Run Code Online (Sandbox Code Playgroud)
而TrafficStats类只是传输数据而不是限制.
android network-traffic user-preferences android-download-manager android-settings
我在我的活动中使用了Download Manager类来执行下载; 它工作正常,我的下一个任务是在我的活动中显示相同的进度百分比.我不知道该怎么做.
我的代码到目前为止
public class DownloadSampleBook extends Activity{
private long enqueue;
private DownloadManager dm;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample_download);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
long downloadId = intent.getLongExtra(
DownloadManager.EXTRA_DOWNLOAD_ID, 0);
Query query = new Query();
query.setFilterById(enqueue);
Cursor c = dm.query(query);
if (c.moveToFirst()) {
int columnIndex = c
.getColumnIndex(DownloadManager.COLUMN_STATUS);
if (DownloadManager.STATUS_SUCCESSFUL == …Run Code Online (Sandbox Code Playgroud) 最近升级到 API 29 时,我的代码:
downloadManager.addCompletedDownload(downloadFilename,
downloadFilename, true, saveInfo.mimeType,
downloadPath, outputFile.length(), true)
Run Code Online (Sandbox Code Playgroud)
…现在产生弃用警告:
警告:'addCompletedDownload(String!, String!, Boolean, String!, String!, Long, Boolean): Long' 已弃用。在 Java 中已弃用
DownloadManager.addCompletedDownload 的 API 文档说:
此方法在 API 级别 29 中已弃用。应用程序应改为将文件提供给 MediaStore.Downloads 集合,以使其作为下载的一部分可供用户使用。
但是,我一直无法找到有关 MediaStore.Downloads 应该如何用作替代品的代码示例。该MediaStore.Downloads文件基本上是不存在的,而MediaStore文档提供无明显指引。
任何人都可以为上述代码提供符合 API 29 的替代品吗?