【问题标题】:downloaded image not showing in galllery android下载的图像未显示在画廊 android
【发布时间】:2020-07-28 07:04:08
【问题描述】:

我正在尝试从 URL 下载图像并将其保存在 android 中。但是我在这里遇到了一个问题,下载的图像没有在图库中显示。我尝试过以前提出的有关堆栈溢出的问题,但它们对我不起作用。 这是我的代码: API 版本为 30。 请任何帮助将不胜感激。

package com.example.testscripts;
/imports/
public class MainActivity extends AppCompatActivity {
    private ProgressBar progressBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        progressBar = findViewById(R.id.progressbar);

        Button clickbtn = (Button) findViewById(R.id.button);

        clickbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                EditText ein = (EditText)findViewById(R.id.urltext);
                Content content = new Content();
                content.execute(String.valueOf(ein.getText()));
            }
        });
    }
    
    public void downloadFile(String imgurls) throws IOException {
        String imageURL = imgurls;
        DownloadManager mgr = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
        Uri downloadUri = Uri.parse(imgurls);
        DownloadManager.Request request = new DownloadManager.Request(downloadUri);
        request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
                .setAllowedOverRoaming(false).setTitle("Demo")
                .setDescription("someting")
                .setDestinationInExternalFilesDir(getApplicationContext(), Environment.DIRECTORY_DOWNLOADS, "hello.jpg");
        mgr.enqueue(request);
        File fles = new File(Environment.DIRECTORY_DOWNLOADS,"hello.jpg");
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse(fles.getAbsolutePath())));
    }

    private class Content extends AsyncTask<String, Void, Void>  {
        private String val1;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressBar.setVisibility(View.VISIBLE);
            progressBar.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));
        }
        @Override
        public void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            progressBar.setVisibility(View.GONE);
            progressBar.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_out));
        }
        @Override
        protected void onCancelled() {
            super.onCancelled();
        }

        @Override
        protected Void doInBackground(String... voids) {
            try {
                val1 = (String) voids[0];
                String urls = val1;
                downloadFile(urls);
            } catch (IOException e){
                e.printStackTrace();
            }
            return null;
        }
    }
}

我已经更新了我的问题,这是我除了导入之外的完整源代码。

【问题讨论】:

  • 图片保存了吗?你能在文件夹中看到它吗?
  • direct.mkdirs(); 检查mkdirs的返回值,如果失败则不要继续。而是显示一个 toast 来通知用户并返回。
  • 你在搞乱 getExternalStorageDirectory() 和 getExternalFilesDir()。
  • @Felix 是的图像保存在文件夹中我可以看到它文件管理器
  • 我使用 MediaScannerConnection.scanFile(),看here,它对我来说很好用。

标签: android android-file android-download-manager android-external-storage


【解决方案1】:

问题似乎是您在将下载请求排入队列后恰好调用了媒体扫描程序。由于图像尚未下载,您应该注册BroadcastReceiver 以了解下载何时完成,然后运行媒体扫描仪。

看到这个:Android download manager completed


编辑:

如果目标 api 级别是 29,请注意 Environment.getExternalStorageDirectory() 已弃用且不可用。 (Reference)

【讨论】:

  • 我试过这个仍然没有运气..即使我试图在onClick上调用它仍然没有更新
  • 请分享文件路径及其 uri 字符串的示例。
  • 嗨,很抱歉回复晚了,我已经用我的完整源代码更新了代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 2019-09-13
  • 2015-05-25
  • 2016-06-15
  • 1970-01-01
相关资源
最近更新 更多