是否可以在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中禁止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;
}