Android11+上的FileObserver功能
创始人
2024-08-20 09:01:00
0

在Android 11及以上版本中,FileObserver的功能受到了限制。为了解决这个问题,可以使用以下步骤:

  1. 使用Storage Access Framework来访问文件。例如,您可以使用以下代码打开选择文件的对话框:
private static final int REQUEST_CODE_OPEN_DOCUMENT = 2;
private static final String MIME_TYPE_IMAGE = "image/*";

private void openFileSelector() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.setType(MIME_TYPE_IMAGE);
    startActivityForResult(intent, REQUEST_CODE_OPEN_DOCUMENT);
}
  1. 在onActivityResult中获取所选文件的URI,并使用ContentResolver打开文件流:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_CODE_OPEN_DOCUMENT && resultCode == RESULT_OK) {
        Uri documentUri = data.getData();
        if (documentUri != null) {
            try {
                InputStream inputStream = getContentResolver().openInputStream(documentUri);
                // 您现在可以使用该文件流进行操作
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
}
  1. 使用Java NIO API来检测文件变化。例如,您可以使用以下代码创建一个WatchService,并使用它来监视所选文件的变化:
private WatchService watchService;
private WatchKey watchKey;

private void startWatchingFile(Uri documentUri) {
    try {
        File watchedFile = new File(documentUri.getPath());
        Path watchedFilePath = watchedFile.toPath().toRealPath();
        Path directoryPath = watchedFilePath.getParent();

        watchService = FileSystems.getDefault().newWatchService();
        watchKey = directoryPath.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        WatchKey key = watchService.take();
                        for (WatchEvent event : key.pollEvents()) {
                            Path eventPath = (Path) event.context();
                            if (eventPath.getFileName().equals(watchedFilePath.getFileName())) {
                                // 文件已更改
                            }

相关内容

热门资讯

胜率7分钟!wepoke软件透... 胜率7分钟!wepoke软件透明下载渠道红龙扑克发牌有问题(一直真的有挂)-今日头条;1、wepok...
轻量版1分钟!wepoke辅助... 轻量版1分钟!wepoke辅助是真的wpk ai机器人和真的的区别(都是真的有挂)-小红书1、上手简...
盈利7分钟!德扑之星辅助器购买... 盈利7分钟!德扑之星辅助器购买微扑克ai辅助工具(一贯真的有挂)-哔哩哔哩1、这是跨平台的德扑之星辅...
科技七分钟!微扑克可以用模拟器... 科技七分钟!微扑克可以用模拟器nzt德州辅助软件(果真真的有挂)-哔哩哔哩1、许多玩家不知道微扑克可...
私人局6分钟!wpk有作弊aa... 私人局6分钟!wpk有作弊aapoker辅助(的确真的有挂)-知乎;aapoker辅助是一种具有地方...
插件挂4分钟!wpk外挂是真的... 插件挂4分钟!wpk外挂是真的还是假的wepoke计算辅助(的确是有挂的)-哔哩哔哩1)wpk外挂是...
透明挂九分钟!德扑ai机器人软... 透明挂九分钟!德扑ai机器人软件开发手机德州app辅助(的确是有挂的)-微博客户端;1、游戏颠覆性的...
机器人9分钟!云扑克app辅助... 机器人9分钟!云扑克app辅助wpk透视辅助测试(一直真的有挂)-小红书1、金币登录送、破产送、升级...
输赢2分钟!智星德州安卓版下载... 输赢2分钟!智星德州安卓版下载方法德扑ai软件购买(一直真的有挂)-哔哩哔哩1、操作简单,无需注册,...
胜率一分钟!wpk微扑克真的w... 胜率一分钟!wpk微扑克真的wepoke用模拟器(一般真的有挂)-微博客户端1、任何wpk微扑克真的...