2010-10-08 81 views
1

我試圖查詢活動外的聯繫人內容提供者。但managedQuery是Activity的一種方法。有沒有其他的類/方法可以用來代替managedQuery?如何查詢活動外的聯繫人內容提供者?

這裏是我的代碼:

class MyActivity extends Activity { 

    private Cursor getContacts() { 
Uri uri = ContactsContract.Contacts.CONTENT_URI; 
String[] projection = new String[] { ContactsContract.Contacts._ID, 
    ContactsContract.Contacts.DISPLAY_NAME, 
    ContactsContract.Contacts.HAS_PHONE_NUMBER }; 
String where = null; 
String[] whereArgs = null; 
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME 
    + " COLLATE LOCALIZED ASC"; 

return context.managedQuery(uri, projection, where, whereArgs, sortOrder); 
    } 
} 

回答

8

使用ContentResolver.query()代替。

(呼叫Context.getContentResolver()得到ContentResolver的實例。你需要一個背景下,無論如何,但它並沒有成爲一個胡亞蓉)

Activity.managedQuery()需要處理與尊重的活動週期的護理給遊標。 ContentResolver.query()不會這樣做,因此您必須確保自己關閉並重新查詢遊標等。

+0

這將不得不意味着我的類仍然需要從Context繼承嗎? – javauser 2010-10-10 00:10:07

+0

不,但您需要從某處獲得有效的上下文(也可能是服務)。您希望運行查詢的使用場景是什麼? – Thorstenvv 2010-10-11 15:58:08

+0

如何從「哪裏」獲得有效的上下文?例如,在Utils類中定義的靜態函數 – matteo 2012-02-16 21:23:11