我正在尝试监听外部存储目录中的任何事件,即通过 Android FileObserver 添加、删除或修改文件,但它的 onEvent 方法永远不会被调用。
我已经尝试了以下所有解决方案:
至于我的代码,它在下面给出:
显现
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.grapgame.fileobserverdemo">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:name=".AppClass"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".FileObserverService" />
</application>
</manifest>
服务
public class FileObserverService extends Service {
public static final String TAG = "FileObserverService";
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStart");
final String pathToWatch = android.os.Environment.getExternalStorageDirectory().toString();
Toast.makeText(this, "My Service Started and trying to watch " + pathToWatch, Toast.LENGTH_LONG).show();
AppClass.fileObserver = new FileObserver(pathToWatch) { // set up a file observer to watch this directory on sd card
@Override
public void onEvent(int event, String file) {
Log.d(TAG, "File created [" + pathToWatch + file + "]");
}
};
AppClass.fileObserver.startWatching();
return START_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
应用类.java
public class AppClass extends Application {
public static FileObserver fileObserver;
@Override
public void onCreate() {
super.onCreate();
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, FileObserverService.class);
startService(intent);
}
}
我也试过没有 AppClass.java,我在 Stackoverflow 上找到了这个解决方案并尝试过。我也尝试了这个GitHub代码,但似乎没有任何效果。
我知道 FileObserver 不是递归的,现在我只是想听一个目录。
非常感谢任何帮助。