【问题标题】:How to download mp3 file from url to Internal storage?如何将 mp3 文件从 url 下载到内部存储?
【发布时间】:2018-09-05 01:23:42
【问题描述】:

我做了一个下载器,它可以工作,但问题是当我从手机下载时没有外部存储它不工作

这是我的代码,非常适合外部存储:-

lateinit var downloadManager :DownloadManager
lateinit var request : DownloadManager.Request
downloadManager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager

btndownload.setOnClickLisner{
request = DownloadManager.Request(Download_Uri)
request.setAllowedOverRoaming(false)
request.setTitle(songdownloadedname)
request.setDescription(null)
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, songdownloadedname)
request.setVisibleInDownloadsUi(true)
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI or DownloadManager.Request.NETWORK_MOBILE)
downloadManager.enqueue(request)

}

我可以编辑什么来将其下载到内部存储而不是外部存储?

【问题讨论】:

  • 这个问题的答案可能对你有帮助:stackoverflow.com/questions/3028306/…
  • 你有什么错误吗?
  • 我不相信您在询问之前尝试过搜索,而您必须这样做。
  • 我在所有答案中都使用了所有类,但它对我不起作用..所以我发布了这个问题以获得帮助,不是吗? @VladyslavMatviienko

标签: java android android-studio kotlin


【解决方案1】:

您可以使用DownloadManager 下载文件。你可以使用这个blog(不是我的博客)作为参考。以下源码取自博客:

public class DownloadManagerActivity 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.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(enqueue);
                    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 uriString = c
                                    .getString(c
                                            .getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
                            view.setImageURI(Uri.parse(uriString));
                        }
                    }
                }
            }
        };

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

    public void onClick(View view) {
        dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
        Request request = new Request(
                Uri.parse("your mp3 url"));
        enqueue = dm.enqueue(request);

    }

    public void showDownload(View view) {
        Intent i = new Intent();
        i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS);
        startActivity(i);
    }
}

【讨论】:

  • 这看起来不像kotlin
  • @VladyslavMatviienko 是的,但如果你检查问题标签,它也会被标记为 java 问题
  • 你是绝对正确的。您能否在您的答案中添加或删除一个空格,以便我能够删除反对票?
  • 这没有回答问题。 OP 要求将数据存储在内部存储中。 DownloadManager 只能保存到外部存储。
【解决方案2】:

我认为您需要检查清单文件 AndroidManifests.xml。 (您需要允许您的应用连接)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多