首页 > 解决方案 > 下载的图像未显示在画廊 android

问题描述

我正在尝试从 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;
        }
    }
}

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

标签: androidandroid-fileandroid-download-managerandroid-external-storage

解决方案


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

看到这个:Android下载管理器完成


编辑:

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


推荐阅读