如何在 android 中访问下载文件夹?

我是新的机器人,我正在制作一个应用程序,其中一个可以下载文件到下载文件夹(使用下载管理器)。我可以看到图片,如果我去下载文件夹在模拟器。因此,如果我想显示一个幻灯片下载的文件如何我可以访问该文件夹?其次,如何在代码中添加进度条: ——

import java.util.Arrays;


import android.app.Activity;
import android.app.DownloadManager;
import android.app.DownloadManager.Query;
import android.app.DownloadManager.Request;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;


public class Download_managerActivity extends Activity {
private long quueue_for_url;


private DownloadManager dm;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


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(quueue_for_url);
Cursor c = dm.query(query);
if (c.moveToFirst()) {
int columnIndex = c
.getColumnIndex(DownloadManager.COLUMN_STATUS);
if (DownloadManager.STATUS_SUCCESSFUL == c
.getInt(columnIndex)) {


ImageView view = (ImageView) findViewById(R.id.imageView1);
String uri_String_abcd = c
.getString(c
.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
view.setImageURI(Uri.parse(uri_String_abcd));


}
}
}
}
};


registerReceiver(receiver, new IntentFilter(
DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}


public void onClick(View view) {
dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);


Request request_for_url = new Request(
Uri.parse("http://fc03.deviantart.net/fs14/i/2007/086/9/1/Steve_Jobs_portrait_by_tumb.jpg"));


Request request_for_url1 = new Request(
Uri.parse("http://2.bp.blogspot.com/_q7Rxg4wqDyc/S5ZRVLxVYuI/AAAAAAAAAvU/fQAUZ2XFcp8/s400/katrina-kaif.jpg"));
Request request_for_url2 = new Request(
Uri.parse("http://www.buzzreactor.com/sites/default/files/Bill-Gates1.jpg"));


quueue_for_url = dm.enqueue(request_for_url);
quueue_for_url = dm.enqueue(request_for_url1);
quueue_for_url = dm.enqueue(request_for_url2);


}


public void showDownload(View view) {
Intent i = new Intent();
//try more options to show downloading , retrieving and complete
i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS);
startActivity(i);
}
}

我想添加一个按钮,执行从下载文件夹的图片,然后像幻灯片显示的功能。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cmpe235.lab1"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="9" />


<uses-permission android:name="android.permission.INTERNET"></uses-permission>


<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Download_managerActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>


</application>
</manifest>

Xml:-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">




<Button android:text="Start Download" android:id="@+id/button1"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal|center" android:textColor="#0000A0"
android:typeface="serif" android:onClick="onClick"></Button>


<Button android:text="View Downloads" android:id="@+id/button2"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal|center" android:textColor="#0000A0"
android:typeface="serif" android:onClick="showDownload"></Button>


<ImageView android:layout_height="wrap_content" android:id="@+id/imageView1"
android:src="@drawable/icon" android:layout_width="wrap_content"></ImageView>


</LinearLayout>
216233 次浏览

For your first question try

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

(available since API 8)

To access individual files in this directory use either File.list() or File.listFiles(). Seems that reporting download progress is only possible in notification, see here.

You need to set this permission in your manifest.xml file

android.permission.WRITE_EXTERNAL_STORAGE

If you are using Marshmallow, you have to either:

  1. Request permissions at runtime (the user will get to allow or deny the request) or:
  2. The user must go into Settings -> Apps -> {Your App} -> Permissions and grant storage access.

This is because in Marshmallow, Google completely revamped how permissions work.

If you're using a shell, the filepath to the Download (no "s") folder is

/storage/emulated/0/Download

Updated

getExternalStoragePublicDirectory() is deprecated.

To get the download folder from a Fragment,

val downloadFolder = requireContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)

From an Activity,

val downloadFolder = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)

downloadFolder.listFiles() will list the Files.

downloadFolder?.path will give you the String path of the download folder.

Update:

The Direct filesystem access to storage has become limited in recent versions of Android.

context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) gives you the directory /emulated/0/Android/data/{package}/files/Download. If you want to have the public downloads folder, look into the Storage Access Framework of Android documentation.

You should add next permission:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

And then here is usages in code:

val externalFilesDir = context.getExternalFilesDir(DIRECTORY_DOWNLOADS)