【发布时间】:2021-02-20 13:12:29
【问题描述】:
我的要求是即使应用程序没有在后台运行,也要观察用户的文件之一,所以我创建了一个前台服务(既方便又好用)并将文件观察器代码放入其中,当然,我处理了以下警告
警告:如果
FileObserver被垃圾回收,它将停止发送 事件。为确保您继续接收事件,您必须保留参考 从其他活动对象到 FileObserver 实例。
通过将FileObserver 变量放在App.class 中
它在 android 9 上运行良好,正如预期的那样,但是当我在 android 10 上尝试我的应用程序时,我可以看到前台服务正在运行,但是只要观察到的文件被修改,就不会触发任何事件
我从 android 10 中阅读了对 java.io.file 的一些新限制,但我无法获得我想要的结果。
是否有任何方法或替代方法可以解决此错误?
代码
private void startObserving() {
fileObserver = new FileObserver(utilityClass.GET_X_FOLDER().getPath(), FileObserver.ALL_EVENTS) {
@Override
public void onEvent(int event, @Nullable String path) {
if (event == FileObserver.CREATE) {
start(path);
}
}
};
fileObserver.startWatching();
}
清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ss_app">
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:logo="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Help" />
<activity android:name=".developer"/>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".AlaramReceiver" />
<receiver android:name=".BootBroadCastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<service android:name=".FileDeleteService" />
<service android:name=".ForeGroundService" />
<service android:name=".xService" />
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="xxxx"/>
</application>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>
【问题讨论】:
-
stackOverflow 中有一个聊天功能,但我似乎无法使用它。无论如何,我刚刚在 Android 10 上进行了另一次测试,它正在运行。我必须在 manifest.xml 文件的
标记下添加行 * android:requestLegacyExternalStorage="true"*。检查它是否正常工作 -
谢谢你呜呜呜呜呜男孩。你有我的生活@DanBaruch 添加你说的那一行。一切正常。只是谢谢你。现在,如果你不是我的,我将成为你的朋友,我的意思是在任何社交网络上,你有任何
-
我明白了哈哈,那样的话,只要你需要,就在这里打我。我会删除我的其他 cmets 以防止这个时间太长
-
我也会@DanBaruch
-
嘿@DanBaruch 我又需要你stackoverflow.com/q/65263749/14599955
标签: java android file android-10.0