這題之所以比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。


沒有留言:
張貼留言