這題之所以比302晚PO是因為我把做到一半的專案丟在宿舍,又懶得重做,所以先做了302。
一樣是程式碼不多可是眉角不少的題目,首先 Manifest 要設 intent-filter、meta-data 跟存取通訊錄用的權限。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="COM.TQC.GDD03" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".GDD03" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity> </application> <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-sdk android:minSdkVersion="7" /> </manifest>再來是搜尋工具的初始設定,先預設開啟搜尋bar跟鍵盤。
//設定預設開啟搜尋用鍵盤 setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); //開啟搜尋bar onSearchRequested();再確認目前 intent 的 action 為搜尋,後取得搜尋字串並執行搜尋用的副程式。
//取得xml中的filter Intent intent = getIntent(); queryAction = intent.getAction(); //如果取得的intent動作為搜尋的話 if (Intent.ACTION_SEARCH.equals(queryAction)) { //取得搜尋bar的字串內容 String query = intent.getStringExtra(SearchManager.QUERY); mTextView01.setText(doMySearch(query)); }最後是,搜尋用的副程式,網路上很多通訊錄用的都是舊的 pakage,而且列舉的東西花樣很多,花了不少時間嘗試那些可以用的,比較重要的是 query 的參數要背一下,projection 似乎不能為空,而 selection 則是要注意 sql command 的萬用字元條件不能打在 ? 旁,而是要跟 selectionArgs排在一起。
private String doMySearch(String query) { String result = ""; ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, new String[] { ContactsContract.Contacts.DISPLAY_NAME }, ContactsContract.Contacts.DISPLAY_NAME + " LIKE ?", new String[] { "%" + query + "%" }, null); for (cursor.moveToFirst(); !(result == null); cursor.moveToNext()) { result += cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))+ "\n"; if (cursor.isLast()) return result; } return result; }參考資料:eoeandroid、cooking java。
沒有留言:
張貼留言