使用MediaScannerConnection scanFile扫描下载的图像文件

时间:2014-11-13 15:47:46

标签: android media scanning

我正在开发一个应用程序,我将图像保存到目录中,但图像不会显示在图库中,直到我重新启动手机。

这是我的代码片段

public class SaveTask extends AsyncTask<String , String , String>
        {
            private Context context;
            private ProgressDialog pDialog;
            String image_url;
            URL myFileUrl;
            String myFileUrl1;
            Bitmap bmImg = null;
            File file ;

            public SaveTask(Context context) {
                this.context = context;
            }

            @Override
            protected void onPreExecute() {
                // TODO Auto-generated method stub

                super.onPreExecute();

                pDialog = new ProgressDialog(context);
                pDialog.setMessage("Downloading Image ...");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(false);
                pDialog.show();

            }

            @Override
            protected String doInBackground(String... args) {
                // TODO Auto-generated method stub

                try {  

                    myFileUrl = new URL(args[0]);
                    //myFileUrl1 = args[0];

                    HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();   
                    conn.setDoInput(true);   
                    conn.connect();     
                    InputStream is = conn.getInputStream();
                    bmImg = BitmapFactory.decodeStream(is); 
                }
                catch (IOException e)
                {       
                    e.printStackTrace();  
                }
                try {       

                    String path = myFileUrl.getPath();
                    String idStr = path.substring(path.lastIndexOf('/') + 1);
                    File filepath = Environment.getExternalStorageDirectory();
                    File dir = new File (filepath.getAbsolutePath() + "/mydownloaddir/");
                    dir.mkdirs();
                    String fileName = idStr;
                    file = new File(dir, fileName);
                    FileOutputStream fos = new FileOutputStream(file);
                    bmImg.compress(CompressFormat.JPEG, 75, fos);   
                    fos.flush();    
                    fos.close();    

                }
                catch (Exception e)
                        {
                            e.printStackTrace();  
                        }
                return null;   
            }


            @Override
            protected void onPostExecute(String args) {
                // TODO Auto-generated method stub
                Toast.makeText(SlideImageActivity.this, "Image Saved Succesfully to Folder 'mydownloaddir'", Toast.LENGTH_SHORT).show();
                pDialog.dismiss();
            }
        }

接下来我应该使用什么代码在图库中使用medisscanner进行图像显示

我在这里有这样的东西但是无法正常使用它:

MediaScannerConnection.scanFile(ApplicationContext.context, new String[] { imageFile.getPath() }, null,
          new MediaScannerConnection.OnScanCompletedListener() {
            @Override
            public void onScanCompleted(String path, Uri uri) {
              Log.i(TAG, "Scanned " + path);
            }
          });

请帮助

1 个答案:

答案 0 :(得分:1)

使用

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"
            + Environment.getExternalStorageDirectory()))); 

//但它仅适用于API&lt; 19

第二种方法

private void scanFile(String path) {

        MediaScannerConnection.scanFile(MainActivity.this,
                new String[] { path }, null,
                new MediaScannerConnection.OnScanCompletedListener() {

                    public void onScanCompleted(String path, Uri uri) {
                        Log.i("TAG", "Finished scanning " + path);
                    }
                });
    }

称之为

scanFile(yourFile.getAbsolutePath());

Also see this Answer