2012-06-22 24 views
5

मैं सार फ़ाइल ऑब्जर्वर वर्ग का विस्तार करने के लिए एक महान वर्ग मिल गया है से काम नहीं कर रहा ...फ़ाइल ऑब्जर्वर आशय सेवा

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 
    } 
} 

मैं बहुत तरह IntentService की onCreate में इन पर्यवेक्षकों के तीन बनाने के लिए:

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(); 

न केवल पर्यवेक्षक काम नहीं कर रहे हैं, लेकिन mkdir फ़ंक्शन काम नहीं कर रहा है।

कोई विचार? धन्यवाद!

+1

एसडीकार्ड के पथ को हार्ड कोड न करें, इसे Context.getExternalStorageDirectory() से प्राप्त करें। अगर आप एसडीकार्ड पर कुछ भी बनाने की योजना बनाते हैं तो यह भी सुनिश्चित करें कि आपके पास बाहरी स्टोरेज मैनिफेस्ट अनुमति है। –

उत्तर

4

जांचें कि आपने अपनी मेनिफेस्ट फ़ाइल में android.permission.WRITE_EXTERNAL_STORAGE शामिल किया है या नहीं।
इस अनुमति की अनुपस्थिति से mkdir() की विफलता हो जाएगी और इससे FileObserver का असफल होने का कारण होगा क्योंकि निगरानी की गई फ़ाइल या निर्देशिका startWatching के समय मौजूद होनी चाहिए अन्यथा कोई ईवेंट रिपोर्ट नहीं की जाएगी।

संबंधित मुद्दे