我有一个FileObserver(File dir)
,它在Android11中工作得很好,但是在Android10中,即使当我试图访问自己的应用程序私有文件夹(外部sdcard)时,Android10中的LogCat 也会崩溃
E/AndroidRuntime(24651): java.lang.NoSuchMethodError: No direct method <init>(Ljava/io/File;)V
in class Landroid/os/FileObserver; or its super classes (declaration of
'android.os.FileObserver' appears in /system/framework/framework.jar!classes2.dex)
E/AndroidRuntime(24651): at com.floritfoto.apps.xvf.FileChooser$1.<init>(FileChooser.java:570)
E/AndroidRuntime(24651): at com.floritfoto.apps.xvf.FileChooser.watchdir(FileChooser.java:570)
E/AndroidRuntime(24651): at com.floritfoto.apps.xvf.FileChooser.access$500(FileChooser.java:53)
我的代码非常简单:
private void watchdir(final File dir) {
if (observer != null) {
observer.stopWatching();
observer = null;
}
observer = new FileObserver(dir) { // <===== CRASHES HERE
@Override
public void onEvent(int event, String path) {
event &= FileObserver.ALL_EVENTS;
....
}
};
observer.startWatching();
}
用observer = new FileObserver(dir.getAbsolutePath())
更改observer = new FileObserver(dir.getAbsolutePath())
很好,但FileObserver(String path)
是已弃用。
我的应用程序有compileSdkVersion 31
、targetSdkVersion 31
和minSdkVersion 14
。
至少在某种程度上这个错误曾被报道过,但还没有提供任何解决方案。
编辑:崩溃是在Android9,而不是10。
发布于 2021-12-25 18:17:43
是API级别29的新版本。。您的minSdkVersion
为14,您的代码将在API 28及更低级别上出现此错误。您应该得到Lint警告以及类似的警告,即FileObserver(File)
比您的minSdkVersion
更新。
你的选择是:
FileObserver(String)
,尽管有不推荐的警告。FileObserver(String)
,在API级别29+上使用FileObserver(File)
,使用Build.VERSION.SDK_INT
来确定应用程序正在运行的设备的API级别。minSdkVersion
设置为29。FileObserver
上使用29+,并跳过任何依赖于旧设备的特性。https://stackoverflow.com/questions/70481619
复制相似问题