当前位置: 首页 > 知识库问答 >
问题:

当用户从我的应用程序存储目录中删除/移动文件时刷新回收器视图?[副本]

佴涵蓄
2023-03-14

我正在制作一个录音机应用程序,当我从目录中手动删除录音文件,当我打开应用程序时,它应该从回收器列表中删除已删除的文件查看任何答案如何做到这一点?

公共类ObserveFiles扩展了FileObserver{public RecyclerViewAdapter;

公共字符串AbsolutePath;

public ObserveFiles(String path){super(path,fileobserver.all_events);

absolutePath = path;

}

if (path == null) {
    return;
}
//a new file or subdirectory was created under the monitored directory
if ((FileObserver.DELETE & event)!=0) {
    Log.d("Deleted---------->", "File Deleted [" + absolutePath +  "/" + path + "]");
    String filepath = absolutePath + "/" + path;
    recyclerViewAdapter.removeOutOfApp(filepath);
}

//data was written to a file
if ((FileObserver.MODIFY & event)!=0) {
    Log.d("Deleted---------->", "File Modified [" + absolutePath  +  "/" + path + "]");
}

//the monitored file or directory was deleted, monitoring effectively stops
if ((FileObserver.DELETE_SELF & event)!=0) {
    Log.d("Deleted---------->", "File Self Deleted [" + absolutePath + "/URecorder" +  "/" + path + "]");
}

//a file or directory was opened
if ((FileObserver.MOVED_TO & event)!=0) {
    Log.d("Deleted---------->", "File Moved To [" +  absolutePath  +  "/" + path  + "]");
}

//a file or subdirectory was moved from the monitored directory
if ((FileObserver.MOVED_FROM & event)!=0) {
    Log.d("Deleted---------->", "File Moved From [" + absolutePath  +  "/" + path + "]");
}

//the monitored file or directory was moved; monitoring continues
if ((FileObserver.MOVE_SELF & event)!=0) {
    Log.d("Deleted---------->", "File Moved Self[" + absolutePath  + "/" +  path + "]");
}

共有1个答案

邓高韵
2023-03-14

您将为音频文件创建ContentObserver。或者做一个服务类,或者在你的相关活动中做它。

下面是internal_content_uri的实现,也可以对external_content_uri执行相同的操作。

long lastTime;
public void observeAudioFiles() {
    getContentResolver().registerContentObserver(android.provider.MediaStore.Audio.Media.INTERNAL_CONTENT_URI, true,
            new ContentObserver(new Handler()) {
                @Override
                public void onChange(boolean selfChange) {
                    Log.d("your_tag", "Internal Media has been changed");
                    super.onChange(selfChange);
                    // save last time for reducing too many calls
                    Long timestamp = readLastDateFromMediaStore(LoginActivity.this, MediaStore.Audio.Media.INTERNAL_CONTENT_URI);
                    if (timestamp > lastTime) {
                        lastTime = timestamp;
                        // TODO: New Audio Files Added, do syncing here
                    }
                }
            }
    );
}

private Long readLastDateFromMediaStore(Context context, Uri uri) {
    Cursor cursor = context.getContentResolver().query(uri, null, null, null, "date_added DESC");
    long dateAdded = -1;
    assert cursor != null;
    if (cursor.moveToNext()) {
        dateAdded = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATE_ADDED));
    }
    cursor.close();
    return dateAdded;
}

我将lasttime作为局部变量放在sample中,但您将其保存在sharedpreference中。

 observer = new FileObserver(pathToWatch) { // set up a file observer to watch this directory on sd card

     @Override
     public void onEvent(int event, String file) {
         //if(event == FileObserver.CREATE && !file.equals(".probe")){ // check if its a "create" and not equal to .probe because thats created every time camera is launched
         Log.d(TAG, "File created [" + pathToWatch + file + "]");

         Toast.makeText(getBaseContext(), file + " was saved!", Toast.LENGTH_LONG).show();
         //}
     }
 };
 observer.startWatching(); //START OBSERVING 
 类似资料:
  • 问题内容: 我在应用程序中拥有的导出工具的任务之一是清除应用程序目录树中的所有目录。我正在Linux外壳中寻找一个递归命令,该命令将遍历整个树并删除文件。 我没有使用export,因为此脚本将用于与SVN不相关的其他文件/目录名称。我尝试了类似的东西: 没用… 问题答案: 尝试这个: 在运行这样的命令之前,我经常喜欢先运行以下命令:

  • 这是不是意味着我没有刷新我的适配器还是什么? @重写公共void onDeleteClick(int position){FoodInfo selectedItem; 食物适配器 } 这是我删除项目后的删除方法,它仍然存在于我的回收视图中,并在firebase中消失 我必须离开这个页面并再次访问,然后它只显示与firebase完全相同的项目 有人帮忙吗?

  • 你的照片。xml 零碎的照片。JAVA 我在循环视图的picture_item上添加了弹出菜单,当我们按下弹出菜单的删除按钮时,我发送该图像的字符串路径来删除照片(项目);和删除图像的方法。 删除图像后,我们必须通过拉刷新手动刷新片段,但在这种情况下,可以添加任何自动刷新片段的方法吗? 请参阅deletePhoto方法,我在其中删除了照片,但当我尝试用removepos方法刷新时,它崩溃了 我也尝

  • 我使用的刀片是伟大的,但缩小是,必须重新编译和html文件创建。 因此,在开发阶段,我需要了解如何在每次页面重新加载时删除存储视图中的所有文件。 知道easies php代码是什么吗?我应该把它放在哪里?在基本控制器中?在文件服务器或路由中。php? 谢谢你的任何想法。我卡住了,需要一些建议,在哪里把删除代码,所以它不删除后,刀片编译为html文件在存储/视图。

  • 我计划为我现有的应用程序实现范围存储。我的所有应用程序数据都存储在外部内存的storage/emulated/0/MyAppName路径中。我必须将这些数据移动到像Android/data/com.myapp这样的私人文件夹中。有人能在这方面提供一些代码片段来帮助吗?

  • 我正在尝试删除一行recyclerview using room。我正在滑动以删除特定的行。。。。 这是我的地址表-- 地址: 数据库: 地址活动: 适配器: 从上面的代码中,我可以一次删除一行,但当我重新访问该活动时,它会再次显示已删除的行 我想知道如何使用in 根据@quealegriamasalegre建议的最新答案 这是我的申请表:-- 适配器现在: 现在和科特林分手了。Uninitial