2011-01-24 74 views
2

我不知道是否可能有如下情況:掛鉤一些常規任務?

我一直是停留在背景中的應用(服務),和被觸發每當用戶

  • 添加/刪除/更新聯繫人
  • 裝/卸載應用程序
  • 添加/刪除/重命名的FS

你認爲這是可能的傢伙一個文件? (當然,如果可以通過黑客和骯髒的東西來通過)

我試圖在網上查找一下,但沒有找到與此有關的討論。

你的猜測是什麼?

回答

3

沒有嘗試過任何這自己,但:

http://mylifewithandroid.blogspot.com/2008/03/observing-content.html似乎處理接觸檢測數據的變化。基本上你需要註冊一個ContentObserver並處理你通知的變化。

結帳http://developer.android.com/reference/android/content/Intent.html - 由此您可以註冊BroadcastReceiver以通知正在安裝或卸載的應用程序。查找ACTION_PACKAGE_ADDEDACTION_PACKAGE_REMOVED

請參閱How to detect file or folder changes in Android?瞭解如何檢測文件系統中文件何時更改。您可能被限制爲使用FileObserver的沙箱,我不確定。此外 - 重命名似乎沒有明確通知,但你可能會從一個MOVED_FROM其次是MOVED_TO,也可能是DELETE隨後CREATE

+0

哇:直入洞!非常感謝你。沒有評論:) – CoolStraw

+0

沒有probs。值得指出的是,你無法以任何方式實際阻止或影響這些操作,因此它不是傳統意義上的鉤子 - 它只是一個通知。 – RivieraKid

+0

夠公平了,我不需要那麼多,簡單的通知就完美了:)。再次感謝您;) – CoolStraw

1

的SDK版本5+ SDK樣本中發現檢測到它:

 /** 
    * Retrieves the contact information. 
    */ 
    @Override 
    public ContactInfo loadContact(ContentResolver contentResolver, Uri contactUri) { 
     ContactInfo contactInfo = new ContactInfo(); 
     long contactId = -1; 

     // Load the display name for the specified person 
     Cursor cursor = contentResolver.query(contactUri, 
       new String[]{Contacts._ID, Contacts.DISPLAY_NAME}, null, null, null); 
     try { 
      if (cursor.moveToFirst()) { 
       contactId = cursor.getLong(0); 
       contactInfo.setDisplayName(cursor.getString(1)); 
      } 
     } finally { 
      cursor.close(); 
     } 

     // Load the phone number (if any). 
     cursor = contentResolver.query(Phone.CONTENT_URI, 
       new String[]{Phone.NUMBER}, 
       Phone.CONTACT_ID + "=" + contactId, null, Phone.IS_SUPER_PRIMARY + " DESC"); 
     try { 
      if (cursor.moveToFirst()) { 
       contactInfo.setPhoneNumber(cursor.getString(0)); 
      } 
     } finally { 
      cursor.close(); 
     } 

     return contactInfo; 
    } 

您可以指定要與Cursor cursor = contentResolver.query(contactUri, new String[]{Contacts._ID, Contacts.DISPLAY_NAME}, null, null, null);列名在http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html描述和看樣品,似乎cursor.getLong(0)這裏就是你要找的聯繫人ID中檢索聯繫人列。它也看起來很不穩定,這取決於聯繫人是如何編輯的以及如何添加其他人,但你也抓住了這些,所以你應該能夠處理這些情況。

+0

謝謝你的男人!感謝你,我想我現在只需要我。親切的問候 – CoolStraw