2011年12月1日 星期四

【Android】TQC+題組系列3(一)

考試快到了,最近要認真一點,把題組做完。

這題之所以比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;
}
參考資料:eoeandroidcooking java

沒有留言:

張貼留言