Tôi đã tìm thấy một lớp học tuyệt vời để mở rộng các lớp tập Observer trừu tượng ...file Observer không hoạt động từ dịch vụ ý định
import android.os.FileObserver;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.util.Log;
public class FileSync extends FileObserver {
public String absolutePath;
public String uid;
public FileSync(String path, String uidd) {
super(path, FileObserver.ALL_EVENTS);
absolutePath = path;
uid = uidd;
}
@Override
public void onEvent(int event, String path) {
if (path == null) { //path is the name of the file... I think its absolute
return;
}
//a new file or subdirectory was created under the monitored directory
if ((FileObserver.CREATE & event)!=0) {
doFileUpload(path, uid);
}
//a file or directory was opened
if ((FileObserver.OPEN & event)!=0) {
//TODO Nothing... yet
}
//data was read from a file
if ((FileObserver.ACCESS & event)!=0) {
//TODO Nothing... yet
}
//data was written to a file
if ((FileObserver.MODIFY & event)!=0) {
doFileUpload(path,uid);
}
//someone has a file or directory open read-only, and closed it
if ((FileObserver.CLOSE_NOWRITE & event)!=0) {
//TODO Nothing... yet
}
//someone has a file or directory open for writing, and closed it
if ((FileObserver.CLOSE_WRITE & event)!=0) {
doFileUpload(path,uid);
}
//[todo: consider combine this one with one below]
//a file was deleted from the monitored directory
if ((FileObserver.DELETE & event)!=0) {
//TODO Remove file from the server
}
//the monitored file or directory was deleted, monitoring effectively stops
if ((FileObserver.DELETE_SELF & event)!=0) {
//TODO Toast an error, recreate the folder, resync and restart monitoring
}
//a file or subdirectory was moved from the monitored directory
if ((FileObserver.MOVED_FROM & event)!=0) {
//TODO Delete from the server
}
//a file or subdirectory was moved to the monitored directory
if ((FileObserver.MOVED_TO & event)!=0) {
doFileUpload(path,uid);
}
//the monitored file or directory was moved; monitoring continues
if ((FileObserver.MOVE_SELF & event)!=0) {
//TODO Recreate the folder and show toast
}
//Metadata (permissions, owner, timestamp) was changed explicitly
if ((FileObserver.ATTRIB & event)!=0) {
//TODO Nothing... Yet
}
}
tôi tạo ba của các nhà quan sát trong onCreate của IntentService như vậy:
new File("/sdcard/Docs/").mkdir();
FileSync files = new FileSync("/sdcard/Docs/",uid);
FileSync pictures = new FileSync(Environment.DIRECTORY_PICTURES,uid);
FileSync music = new FileSync(Environment.DIRECTORY_MUSIC,uid);
files.startWatching();
pictures.startWatching();
music.startWatching();
Không chỉ quan sát viên không hoạt động mà chức năng mkdir không hoạt động.
Bất kỳ ý tưởng nào? Cảm ơn!
Không mã cứng đường dẫn của sdcard, lấy nó từ Context.getExternalStorageDirectory(). Ngoài ra, hãy đảm bảo bạn có quyền ghi tệp kê khai lưu trữ bên ngoài nếu bạn định tạo bất kỳ thứ gì trên sdcard. –