Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在Android Nougat上刷新媒体商店?_Android - Fatal编程技术网

是否可以在Android Nougat上刷新媒体商店?

是否可以在Android Nougat上刷新媒体商店?,android,Android,我已将应用程序专用文件夹中的文件复制到Pictures或DCIM中,我想在我的应用程序中打开gallery小部件并显示这些图像。 但是,“我的图库”小部件使用MediaStore id创建了一个缩略图图库,新添加的图像不会出现在那里 我尝试了stackoverflow上建议的所有三种解决方案,以刷新媒体商店并告诉android新文件的存在 sendBroadcast(新的意图(意图.动作\u媒体\u挂载,)在较新的API中禁止 二, 三, 同样,uri是空的 为什么安卓让执行如此正常、合法的操作

我已将应用程序专用文件夹中的文件复制到
Pictures
DCIM
中,我想在我的应用程序中打开gallery小部件并显示这些图像。 但是,“我的图库”小部件使用MediaStore id创建了一个缩略图图库,新添加的图像不会出现在那里

我尝试了stackoverflow上建议的所有三种解决方案,以刷新媒体商店并告诉android新文件的存在

  • sendBroadcast(新的意图(意图.动作\u媒体\u挂载,
    )在较新的API中禁止
  • 二,

    三,

    同样,uri是空的

    为什么安卓让执行如此正常、合法的操作变得如此困难? 我如何在牛轧糖中达到这种效果

    编辑:我还尝试为
    ACTION\u MEDIA\u SCANNER\u SCAN\u文件发送广播

    我甚至考虑到了这一点:

    所以现在我发送的是
    内容://
    而不是
    文件://
    URI,但仍然没有

    编辑2:

    我试过这个

    public static void scheduleJob(Context context) {
      JobScheduler js =
          (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
      JobInfo job = new JobInfo.Builder(
        MY_BACKGROUND_JOB,
        new ComponentName(context, MyJobService.class))
          .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
          .setRequiresCharging(true)
          .build();
      js.schedule(job);
    }
    
    正如这里所解释的


    但同样,当我打开我的图库时,新图像不在那里

    结果是我试图扫描我复制到另一个地方然后删除的文件的路径,而不是新创建的文件的路径


    通过组合使用媒体扫描仪和
    ACTION\u media\u scanner\u SCAN\u FILE
    并尝试扫描正确的文件,我能够刷新媒体存储。

    我正在做类似的事情,它也在牛轧糖中工作。每当我调用
    getfilepath();
    方法,它返回手机存储器中所有图像的最新
    ArrayList
    -

    public ArrayList<String> getFilePaths()
    {
    
        Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        String[] projection = {MediaStore.Images.ImageColumns.DATA};
        Cursor c = null;
        SortedSet<String> dirList = new TreeSet<String>();
        ArrayList<String> resultIAV = new ArrayList<String>();
    
        String[] directories = null;
        if (u != null)
        {
            c = getContentResolver().query(u, projection, null, null, null);
        }
    
        if ((c != null) && (c.moveToFirst()))
        {
            do
            {
                String tempDir = c.getString(0);
                tempDir = tempDir.substring(0, tempDir.lastIndexOf("/"));
                try{
                    dirList.add(tempDir);
                }
                catch(Exception e)
                {
    
                }
            }
            while (c.moveToNext());
            directories = new String[dirList.size()];
            dirList.toArray(directories);
    
        }
    
        for(int i=0;i<dirList.size();i++)
        {
            File imageDir = new File(directories[i]);
            File[] imageList = imageDir.listFiles();
            if(imageList == null)
                continue;
            for (File imagePath : imageList) {
                try {
    
                    if(imagePath.isDirectory())
                    {
                        imageList = imagePath.listFiles();
    
                    }
                    if ( imagePath.getName().contains(".jpg")|| imagePath.getName().contains(".JPG")
                            || imagePath.getName().contains(".jpeg")|| imagePath.getName().contains(".JPEG")
                            || imagePath.getName().contains(".png") || imagePath.getName().contains(".PNG")
                            || imagePath.getName().contains(".gif") || imagePath.getName().contains(".GIF")
                            || imagePath.getName().contains(".bmp") || imagePath.getName().contains(".BMP")
                            )
                    {
    
    
    
                        String path= imagePath.getAbsolutePath();
                        resultIAV.add(path);
    
                    }
                }
                //  }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
        return resultIAV;
    
    
    }
    
    public ArrayList getfilepath()
    {
    uriu=MediaStore.Images.Media.EXTERNAL\u CONTENT\u Uri;
    String[]projection={MediaStore.Images.ImageColumns.DATA};
    光标c=null;
    SortedSet dirList=新树集();
    ArrayList resultIAV=新的ArrayList();
    字符串[]目录=null;
    如果(u!=null)
    {
    c=getContentResolver().query(u,投影,null,null);
    }
    if((c!=null)&(c.moveToFirst())
    {
    做
    {
    String tempDir=c.getString(0);
    tempDir=tempDir.substring(0,tempDir.lastIndexOf(“/”);
    试一试{
    dirList.add(tempDir);
    }
    捕获(例外e)
    {
    }
    }
    而(c.moveToNext());
    目录=新字符串[dirList.size()];
    dirList.toArray(目录);
    }
    对于(int i=0;i
    
    public static void scheduleJob(Context context) {
      JobScheduler js =
          (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
      JobInfo job = new JobInfo.Builder(
        MY_BACKGROUND_JOB,
        new ComponentName(context, MyJobService.class))
          .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
          .setRequiresCharging(true)
          .build();
      js.schedule(job);
    }
    
    public ArrayList<String> getFilePaths()
    {
    
        Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        String[] projection = {MediaStore.Images.ImageColumns.DATA};
        Cursor c = null;
        SortedSet<String> dirList = new TreeSet<String>();
        ArrayList<String> resultIAV = new ArrayList<String>();
    
        String[] directories = null;
        if (u != null)
        {
            c = getContentResolver().query(u, projection, null, null, null);
        }
    
        if ((c != null) && (c.moveToFirst()))
        {
            do
            {
                String tempDir = c.getString(0);
                tempDir = tempDir.substring(0, tempDir.lastIndexOf("/"));
                try{
                    dirList.add(tempDir);
                }
                catch(Exception e)
                {
    
                }
            }
            while (c.moveToNext());
            directories = new String[dirList.size()];
            dirList.toArray(directories);
    
        }
    
        for(int i=0;i<dirList.size();i++)
        {
            File imageDir = new File(directories[i]);
            File[] imageList = imageDir.listFiles();
            if(imageList == null)
                continue;
            for (File imagePath : imageList) {
                try {
    
                    if(imagePath.isDirectory())
                    {
                        imageList = imagePath.listFiles();
    
                    }
                    if ( imagePath.getName().contains(".jpg")|| imagePath.getName().contains(".JPG")
                            || imagePath.getName().contains(".jpeg")|| imagePath.getName().contains(".JPEG")
                            || imagePath.getName().contains(".png") || imagePath.getName().contains(".PNG")
                            || imagePath.getName().contains(".gif") || imagePath.getName().contains(".GIF")
                            || imagePath.getName().contains(".bmp") || imagePath.getName().contains(".BMP")
                            )
                    {
    
    
    
                        String path= imagePath.getAbsolutePath();
                        resultIAV.add(path);
    
                    }
                }
                //  }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
        return resultIAV;
    
    
    }