2011年6月30日 星期四

UCampus MAP 初版畫面

目前開啟地圖後會將完整校園範圍置於螢幕中央,並將整個校園範圍用紅線框住,校園建築物為紅色標記,使用者目前位置為藍色標記,可利用3G、WiFi以及GPS做定位,點擊紅色標籤後會在標籤頭上顯示出一個按鈕,按鈕上標示著所點擊的單位,並將點擊的單位移至畫面中央;如果再點擊標籤頭上的按鈕將會進入下一頁,會顯示更多關於此單位的訊息。




未來將對畫面呈現方式、使用者介面及整體畫面做更進一步修改。
新功能的開發將會包括:
1.顯示使用者附近的信息提示
2.校園周遭生活機能相關訊息
3.新增選單可供變更地圖上顯示之地標類別
4.網址的直接連結

2011年6月29日 星期三

debug - 更改完layout後產生resource not found

剛剛測試按下地圖標記的功能,在 pop.xml 中將 ImageButton 改成一般的 Button 後,程式突然發生問題,原本發現問題是在設定OnClickListener這行,但是找了半天卻沒發現哪裡有問題,回復成原來的 ImageButton 卻同樣無法執行。

最後發現問題是出在 pop.xml 中的layout設定,似乎 pop.xml 的設定沒有更改,所以只要在 pop.xml 中做任何改變例如新增一個空白行等等,再重新存檔後程式就能正常執行。

2011年6月20日 星期一

Debug - SOURCE NOT FOUND

使用 NETWORK_PROVIDER 的功能時,必須要注意 AndroidManifest.xml 裡的權限是否填寫正確。除了原本的 INTERNET 權限外,必須還要加入 ACCESS_COARSE_LOCATION 與ACCESS_FINE_LOCATION 這兩個權限其中一個或是兩者都加。

加入哪一個取決於使用了哪一個 PROVIDER ,NETWORK_PROVIDER 的這個參數可以使用 Cell-ID、WiFi 或是 GPS,但是 GPS_PROVIDER 代表只能使用 GPS 做為 location 的提供服務。下面兩點為 Android Developer API 裡所提供的說明。


  1. ACCESS_COARSE_LOCATION :
    Allows an application to access coarse (e.g., Cell-ID, WiFi) location

  2. ACCESS_FINE_LOCATION :
    Allows an application to access fine (e.g., GPS) location


如果未加入這些權限,則在執行時會出現 "程式未正常終止" 的錯誤訊息。

2011年6月13日 星期一

Android UI 元件整理 (一)


首先來強調一下本文的重點在於 UI 功能上實做練習的整理,所以較無理論陳述方面的內容,可以算是整理出來方便未來的查詢用。

在 Android 的應用程式中,使用者介面是由 View 以及 ViewGroup 兩類物件所構成,View類的物件是屬於基本的原件,像是按鈕、下拉式清單等,而 Viewgroup 是屬於佈局類型,預設提供了許多不一樣的畫面佈局,像是 linear 或是 tabular and relative 等。下圖為 View 和 ViewGroup 的簡易結構。



一般來說 UI 的設計除了版面的編排之外,就是元件的事件監聽以及功能編寫;使用 Eclipse 開發的其中一個好處,就是 Google 已經提供了一個非常方便的版面編輯器,開發者可以利用原件拖拉的方式進行版面排版,也可以直接填寫需要的參數,比起直接編寫 XML 檔案方便太多了。所以接下來的內容,除非必要,不然不會詳述如何編寫 UI 的描述檔,而重點將放於編寫 UI 的功能。

TextView、Button
TextView 和 Button 是元件裡面最常用到的,我們來設計一個簡單的小功能當作練習 : 按下 Button 後在 TextView 處顯示一行文字 "按下了按鈕"。

當我們使用 Eclipse 新增專案,預設會產生出一個 HelloWorld 的程式,而這程式裡就已經包含了最基本的 TextView 元件用來顯示 HelloWorld 字串,這邊我們直接使用這個 TextView 原件,另外再拖一個 Button 至畫面上,這時我們完成了版面配置。當拉元件至面板時,元件會自動的產生一個 id 值,用圖是創建物件時尋找資源用,而 id 值預設為"元件名稱 + 序號",例如:button1。



版面元件排版整理完後,接下來就是功能上的編寫;因為我們的功能需要知道何時按下按鈕,所以必須在按鈕的地方設置一個監聽按鈕按下的監聽器,用來得知何時按下按鈕,透過按下按鈕的這個通知,我們得以接下去執行顯示 "按下了按鈕" 的功能。

原始碼:

package nchu.testButton;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class testButton extends Activity {
/** Called when the activity is first created. */
TextView m_textview;
Button m_button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
m_textview = (TextView)this.findViewById(R.id.text);
m_button = (Button)findViewById(R.id.button1);

m_button.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v)
{
String str = "按了Button";
m_textview.setText(str);
}
});
}
}


使用元件前,我們必須先建立元件的物件,而物件資源是利用 findViewById() 函式從 R.java 中尋找,以下為建立 TextView物件 和 Button物件與取得資源的程式碼。

TextView m_textview;
Button m_button;
m_textview = (TextView)this.findViewById(R.id.text);
m_button = (Button)findViewById(R.id.button1);


建立與取得物件資源後,接下來就是監聽 Button 按下的動作,為了之後顯示 "按下了Button" 文字,除了監聽之外我們必須改寫 onClick(),讓程式知道按下 button 後要做什麼。程式碼裡可以看到我們利用 m_textview 的 setText 功能,將字串設定給 m_textview,所以當我們按下 button 後 m_textview 就被設定了一個字串,而這字串就直接顯示在螢幕上,達到我們所需的功能。

>
m_button.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v)
{
String str = "按了Button";
m_textview.setText(str);
}
});





Toast
這個提示元件,是由 Android 所提供的類別,並不需要在版面上配置,所以我們直接在主程式中直接使用,跟上面一樣,寫一個小程式當練習,功能的部分跟 TextView 一樣,只是將文字內容的顯示,由 TextView 改為 Toast。
原始碼:


package nchu.testButton;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class testButton extends Activity {
/** Called when the activity is first created. */
Button m_button;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
m_button = (Button)findViewById(R.id.button1);

m_button.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v)
{
Display("這是按鈕測試");
}
});
}
public void Display(String str){
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
}


要使用 Toast 顯示提示文字,我們可以另外寫一個 Display 的功能,接受字串的傳入。Toast 可以利用 makeText(content,text,duration) 來製成一串標準的文字,再利用 show()將其顯示;而 makeText的參數 content 一般為目前的 Activity 或是 Application,還有 duration 則是要顯示的長度,一般有 LENGTH_SHORT 或 LENGTH_LONG 兩個選擇。




EditText
在應用程式中我們經常需要須入帳號密碼等文字,這個輸入文字的功能可以利用 EditText 元件來達成;這裡的練習使用一個 TextView 和一個 EditText 元件,當我們在 EditText 中輸入文字後,隨即將輸入的文字顯示於 TextView 中。

原始碼:
package nchu.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class test extends Activity {
TextView m_textview;
EditText m_edittext;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

m_textview = (TextView)findViewById(R.id.textView1);
m_edittext = (EditText)findViewById(R.id.editText1);

m_edittext.setHint("請輸入文字");
m_edittext.setOnKeyListener(new EditText.OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
m_textview.setText(m_edittext.getText().toString());
return false;
}
});
}
}


在 EditText 元件設定 OnKeyListener,用以監聽是否有按下按鍵,並且覆寫 onKey 功能,當按下按鍵時,可以從 m_edittext 物件的 getText方法取得,並且利用 toString() 將其轉為字串,最後將此字串設定給 TextView 顯示。




RadioGroup, RadioButton

RadioButton 可以提供選擇讓我們直接選取,並且可以使用 RadioGroup 將多個 RadioButton 整合成一個群組,下面這個範例簡單的使用一個 RadioGroup 群組,群組裡有四個選項,每個選項有一個名字,當我們選擇其中一個項,選取的名字會顯示在上方的 TextView 中。

在拖拉元件中,RadioGroup 預設是三個 RadioButton ,如果要新增一個 RadioButton,可以將 RadioButton 拉進 RadioGroup 並且更改其 id 值,這樣就可以使 RadioGroup 新增一個 RadioButton。

原始碼 :

package nchu.test;

import android.app.Activity;
import android.os.Bundle;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

public class test extends Activity {
TextView m_textview;
RadioGroup m_radiogroup;
RadioButton m_radio0,m_radio1,m_radio2,m_radio3;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

m_textview = (TextView)findViewById(R.id.textView1);
m_radiogroup = (RadioGroup)findViewById(R.id.radioGroup1);
m_radio0 = (RadioButton)findViewById(R.id.radio0);
m_radio1 = (RadioButton)findViewById(R.id.radio1);
m_radio2 = (RadioButton)findViewById(R.id.radio2);
m_radio3 = (RadioButton)findViewById(R.id.radio3);

m_radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){

case R.id.radio0 :
m_textview.setText(m_radio0.getText());
break;
case R.id.radio1 :
m_textview.setText(m_radio1.getText());
break;
case R.id.radio2 :
m_textview.setText(m_radio2.getText());
break;
case R.id.radio3 :
m_textview.setText(m_radio3.getText());
break;
}}});}}


同樣設立一個 OnCheckedChangeListener(),只要有改變就會進入 switch case 找到適合的片段執行,而每個 case 直接搜尋 R.java 裡的 RadioButton id值。




CheckBox

CheckBox 和 RadioButton 很類似,不同點在於 CheckBox 為複選,用法與其他元件相同,建立物件取得資源,並針對每個元件設定所需的監聽器,下面練習的功能為:點選每個選項後,即會獲得點選了哪一項的通知,並且在按下確定後統計總共選了幾項。因為在物件的操作上都與之前所講的大同小異,接下來就不再細述。

原始碼:

package nchu.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.TextView;
import android.widget.Toast;

public class test extends Activity {
TextView m_textview;
CheckBox m_checkbox0,m_checkbox1,m_checkbox2,m_checkbox3;
Button m_button;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

m_textview = (TextView)findViewById(R.id.textView1);
m_checkbox0 = (CheckBox)findViewById(R.id.checkBox0);
m_checkbox1 = (CheckBox)findViewById(R.id.checkBox1);
m_checkbox2 = (CheckBox)findViewById(R.id.checkBox2);
m_checkbox3 = (CheckBox)findViewById(R.id.checkBox3);
m_button = (Button)findViewById(R.id.button1);

m_checkbox0.setOnCheckedChangeListener(new OnCheckedChangeListener(){

@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if(m_checkbox0.isChecked())
{
display("選擇"+m_checkbox0.getText());
}
}});

m_checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener(){

@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if(m_checkbox1.isChecked())
{
display("選擇"+m_checkbox1.getText());
}
}});

m_checkbox2.setOnCheckedChangeListener(new OnCheckedChangeListener(){

@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if(m_checkbox2.isChecked())
{
display("選擇"+m_checkbox2.getText());
}
}});

m_checkbox3.setOnCheckedChangeListener(new OnCheckedChangeListener(){

@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if(m_checkbox3.isChecked())
{
display("選擇"+m_checkbox3.getText());
}
}});

m_button.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
int num = 0;
if(m_checkbox0.isChecked())
num++;
if(m_checkbox1.isChecked())
num++;
if(m_checkbox2.isChecked())
num++;
if(m_checkbox3.isChecked())
num++;
display("共選了" + num + "項");
}
});
}
public void display(String str){
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
}





待續~~

Android 開發前須知 - Activity, Intent, Content Provider, Service 簡介


Android 應用程式由四個主要模組所組成,此四個模組分別為 Activity、Intent、Content Provider、Service,雖然一個 Android 應用程式都由這四個模組構成,但並不代表著每個應用程式必須包含每個模組,像是簡單的印出 HelloWorld 字串的應用,只需要包含一個 Activity 即可達成。

Activity

Activity 是應用裡面最基本的模組,每一個 Activity 代表著一個螢幕,每一個螢幕所負責的就是處理應用程式所需的工作或是跳轉至其他 Activity 等功能,例如我們需要一個應用為取得課程資訊,這時可以設計成,第一個 Activity 顯示著所有學院的列表頁,第二個 Activity 顯示資訊系所所有課程列表,第三個 Activity 顯示計算機概論課程資訊,也因為如此的設計讓應用的功能上可以容易的轉換。


package nchu.test.HelloWorld;

import android.app.Activity;
import android.os.Bundle;

public class HelloWorld extends Activity {
/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);
}
}

所有的 Activity 都繼承於 android.app.Activity 類別,並且會馬上呼叫 onCreate() 函式,不過並不是呼叫 onCreate() 之後 Activity 就能馬上運行,實際上 Activity 要能開始運行需要經過三個過程為"建立 -> 開始 -> 重繪",三個過程相對應的函式如下。onResume()為重繪整個螢幕。

開始 -> onCreate() -> onStart() -> onResume() -> Activity 運行


Intent

當創建了許多 Activity 之後,該如何讓這些 Activity 切換,我們可以利用 Intent 這個類別。

Intent 類別主要是描述應用的功能,描述的結構為動作和動作相對應的資料,利用 IntentFilter 裡的描述可以透過比對找到應用程式需要呼叫的 Activity 是哪一個。

我們看一下 AndroidManfest.xml 檔案裡 IntentFilter 描述:

在 action android:name 這行描述的是 Activity 的動作,動作名稱為 android.intent.action.MAIN。

在category android:name 這行描述的是使用哪個種類的元件來掌控 Intent,這裡使用的是category.LAUNCHER,主要可以將 Activity 放置到 top-level application launcher 去執行。


<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Activity 的跳轉會經過以下幾個步驟:
首先暫停 Activity01,然後 Activity02 進入 Activity 的生命週期,之後先停止 Activity01 然後才將其摧毀。

Activity01 onPause() -> Activity02 onCreate() ->
Activity02 onStart() -> Activity02 onResume() ->
Activity01 onStop() -> Activity01 onDestroy()


Content Provider

一般來說,在 Android 應用程式裡是無法取得不同應用程式的資料,不過當我們使用 Android 設備時可以儲存通訊人連絡電話,不同的應用程式開啟都可以共同的存取這些通訊錄的資料,而這個資料共有的功能就是由 Content Provider 所提供。

Content Provider 是一個特殊的資料儲存類型,並且提供了一些標準的介面方便資料的存取,像是 query()、insert() 或是 update() 等,當我們在應用程式中有需要使用到 Content Provider 時,則必須在 AndroidManifest.xml 檔案中宣告。


Service

當我們開啟一個撥放歌曲的應用程式聽著歌,接著想要上網找尋資料,勢必會遇到一個狀況,必須跳離播歌的程式才能上網,當我們跳離開程式後又希望歌曲可以在背景中繼續撥放著,那這個部份就是由 Service 所提供。

Service 像是在背景提供著服務,不像 Activity 有著介面可以讓使用者操作,通常 Service 的生命周期都是比較長,屬於在背景長駐執行一些不中斷的程式。


相關連結:
Android Developer : Activity
Android Developer : Intents and Intent Filters
Android Developer : Content Provider
Android Developer : Services

2011年6月11日 星期六

Android 開發前須知 - 目錄結構


Android 預設的整體架構是以 MVC 的方式在做規劃,利用 MVC 的架構我們可以把運算邏輯、版面配置和控制元件獨立開來方便在開發過程中的修改更新,讓整個系統更有擴充的彈性,如果要利用到這些好處我們必須對其目錄結構有初步的認識。

在 Android 的開發目錄結構中有幾個較為重要分別是:
src, res, gen, R.java, AndroidManfest.xml

src目錄
專案的 package 和 source code 都會存放在此地


res -> values
專案的資源都可以在此定義,定義的格式為 xml 檔案,檔名可以利用資源類型做分類,像是利用 strings.xml 或是 colors.xml 我們可以很容易的判斷字串資源或是色彩資源,定義的方式為一組關於資源類型的標籤並且賦予其姓名,並且利用開始標籤與結束標籤將我們所需的值包覆。如果使用 Eclipse 作為開發環境,Google 提供了非常方便的編輯器,在編輯器可以直接利用 Add 或是 Remove 等按鍵產生需要的資源。

<?xml version="1.0" encoding="utf-8"?>
<resources>
<drawable name="white">#FFFFFF</drawable>
<drawable name="black">#000000</drawable>
</resources>



res -> layout -> main.xml
layout 裡面放置的是版面佈局的 xml 描述檔,當應用程式中所有需要用到的 UI 元件或是排版方式都必須在此檔案內做描述。如果使用 Eclipse 作為開發環境,Google 提供了非常方便的編輯器,可以利用拖拉以及點選參數填值的方式,輕鬆達到版面的佈置,而不需要進入xml檔案內做編寫。

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@drawable/white" android:onClick="cvOnClick">
<TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/KilogramsLabel" android:textColor="@drawable/black" android:text="@string/kgLabel"></TextView>
<EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/kilograms" android:numeric="integer"></EditText>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ConverButton" android:text="@string/CvButton" android:onClick="cvOnClick"></Button>
</TableRow>
<TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/PondsLabel" android:text="@string/LbLabel" android:textColor="@drawable/black"></TextView>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/Ponds" android:textColor="@drawable/black"></TextView>
</TableRow>
</TableLayout>



gen -> R.java
此檔案為自動產生並且是唯讀檔,定義了所有資源的索引檔,假設當我們在 strings.xml 中加入了一個字串資源
<string name="hello">Hello World, HelloMyAndroid!</string>

當專案重整之後 R.java 將會自動的把放置 hello 這個名稱的資源位置給加入

/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/

package idv.tw.kudodir.hellomyandroid;

public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}


AndroidManfest.xml
當應用程式中有使用到任何的 Activity, Intent, Content Provider, Service 都必須在這個檔案內做描述。如果使用 Eclipse 作為開發環境,Google 提供了非常方便的編輯器,在編輯器內已經有許多預設好的欄位,只需要選擇欄位填入適當的值,就可以產生出。

2011年6月9日 星期四

CAMPUS APP - uAlberta


uAlberta 簡介:


uAlberta campus app 是由位於加拿大 University of Alberta 所開發的行動校園應用程式,我們可以利用 uAlberta 掌握最新的校園活動、瀏覽任何學院的課程或是查看建築物資訊等。


uAlberta 應用包含了11項,分別為 : news, events, courses, directory, onecard, library, map, transit, student services, emergency, feedback


接下來將對這些功能分別做些介紹

程式版本 : 1.0.2 for Android


News : 提供校園相關新聞



News為大部分校園應用都會有的功能,uAlberta提供了一些分類 :

Express News, The complete Gateway Feed Experience, News, Opinion, Arts & Entertainment, Sports, Features

除了上述幾樣分類外並沒有其他對於發佈日期或是關鍵字做搜尋的能力,當進入某一分類後所顯示的是各新聞標題、日期與內文簡介,每則新聞以一條淺灰色的分隔線加以區隔。


當我們想要更深入得知某則新聞的詳細內容,只需要點選我們所關心的那則新聞,隨即會呼叫瀏覽器,將我們所點選的新聞及其他詳細資訊利用瀏覽器連上網路開啟。


由這個部分可以發現,當我們點選News功能後,應用程式並不是將所有的內文載入,也不會將所有資訊存在本機的檔案或是資料庫中,當我們對某則新聞有興趣時才及時的利用瀏覽器連線至網頁觀看,這樣的處理方式對於行動裝置的儲存空間與連線速度或是流量都可以大大的減少,不會讓使用者等太久的時間只為了載入自己並無興趣的內容,也可以減少伺服器對外連線的負荷。



Events : 提供校園相關的活動訊息

進入Events功能,首先會被帶往這個月份的頁面,頁面上方有一個日期選擇功能,可以利用這個功能轉換到自己想查的月份,而事件的排列方式是以我們所選擇當月份資料以日期先後順序來做排列。

點選關心的事件後,可以得知完整的活動內容、活動時間、地點或是活動相關的網址。


Courses : 提供各個學院課程相關資訊



同樣的也是幾乎每個校園應用會提供的功能,分類方式是利用學院、部門、課程分類加以歸納,課程資訊除了開課名稱外還包含了哪一季所開的課程,有哪些老師開設了哪些課以及上課地點等。


Courses只是單純的提供所有課程的資訊,並沒有能夠與學生更進一步的互動,此功能中沒有讓學生可以將查詢到的課程加入到最愛,這在擁有許多課程的查詢系統中容易讓使用者對於不斷的重複選取感到不耐煩,也沒有提供任何的搜索功能,如此一來使用者就只能不斷的去每個分類下逐一尋找,並且一直重複這個動作,直到將所有想知道的課程內容的查詢完畢,如果下次還需要再進入查詢,那這個動作不可避免的還要再執行一次。








Directory : 提供人員的連絡資訊



第一次進入directory時,頁面並不會有預設的分類,而是直接前往搜尋頁面,利用搜尋的功能可以快速查詢到名字中有包含所輸入的關鍵字,像是關鍵字打jack,查詢的結果並不會只有 Jack Born 或是 Jack Braakman,甚至於像是 Jackline Baniak 還是 Ishtiak Ahmed Jacky 等名字都會一並顯示出來。


比起其他學校的校園應用來說,這個功能所提供的資訊並不多,只有名字和e-mail,沒有可以加入至連絡人清單的功能,也沒有提供其他的聯絡方式。






ONEcard : 提供 University of Alberta 的 ONEcard 功能



ONEcard 功能可以讓我們使用一張卡片,這張卡片內可以儲值以及包含了一些個人資訊,利用這張卡我們可以轉搭交通工具、在圖書館借書或是需要影印時利用此卡也可以使用校園內的影印機等功能。




Library : 提供圖書館藏書或是相關資訊



uAlberta 的 Library 提供了許多豐富的資訊,主要有9項

Locate & Contact, Hours, WorldCat Local Catalogue, browse by subject, Mobile E-Services, My account, Ask Us, full site, feedback



  • Locate & Contact


    提供各個圖書館的簡介、位置和聯絡方式等








  • Hours


    提供圖書館的開放時間





  • WorldCat Local catalogue

    提供了最主要的圖書搜尋功能,進入了查訊系統後我們可以利用下方已經提供的預設分類直接查詢,預設分類包含了以下13種


    Artistic photographyBiographyChildren's bookscookingGraphic novels
    HealthHobbiesLandscape gardeningMilitary historyMovie reviews
    Music history and criticismPersonal financeTravel description



    如果不想使用預設分類,我們可以直接輸入關鍵字的方式搜尋,除此之外對於搜尋的方式Library還提供了進階的設定,例如依照ISBN做搜尋或是依照作者做排序等功能,下表為可做設定之選項。


    Search by

    Sort by

    keywordrelevance
    authorauthor
    titletitle
    subjectpublication date
    ISBN







  • Browse by Subject


    此功能項目提供許多導覽的資訊,讓我們可以利用主題瀏覽圖書館藏書資訊。


    我們可以利用頁面上方的圖書導覽搜尋找到相關的導覽文章,或是利用分類好的導覽遍尋相關主題,如果不熟悉此功能Browse by Subject還提供了一段影片教學。








  • Mobile E-Services


    提供幾個行動電子服務的資訊


    Mobile Library Catalogue, Mobile Enabled Databases, RefWorks Mobile, Health Sciences Resources





  • Ask Us


    此功能裡包含了ask us chat, email, visit us, phone, text 五種連絡方式可供使用者詢問問題。





    除了上述的功能之外,我們可以登入自己的帳號做相關操作,或是連結至圖書館完整的網址,如果你覺得有什麼問題可以反映,也可以利用feedback的功能向圖書館提出。



Map : 提供餐飲、公車站、建築物等地圖資訊



此功能使用google map標示出你所感興趣的地理位置,包含那種類有


buildings, landmarks, transit, food, parking, accessibility


除了基本的地理資訊外,針對不同的類別系統還另外提供更多的資訊,像是點選landmarks我們可以得知相關的介紹。








Transit : 大眾運輸交通相關訊息



Transit 功能除了提供 lrt 或是 bus 的到站資訊外,我們也可以新增自己需求的停靠站,經由這樣的方式我們可以快速查詢到自己的需求而不必要再點選搜尋,除此之外系統也貼心的將過去瀏覽的站點存成歷史資料方便以後使用。







Student services : 提供有關於學生日常生活所需的服務聯絡資訊



此部分的功能為單純的服務中心的資訊,內容除了學校的許多服務中心之外,還包含了一些學生團體的連絡資訊,在列表列後方如果有一個勾的標誌代表著這是一個父目錄,裡面還包含了其他的子類別。





Emergency : 提供了各校園緊急聯絡電話



目前只有靜態的提供校園內各個緊急聯絡電話,並沒有提供即時的緊急事件資訊。




Feedback : 透過Feedback我們可以將想法或是意見回饋給uAlberta



此功能會經由呼叫 e-mail 程式進行發送電子郵件,而進入後由建會預先將你所使用的應用程式版本、行動裝置型號還有系統版本等資訊列入郵件內容,對於開發者除錯或是收集資訊有相當大的幫忙。



uAlberta 內容相當的豐富,除了行動裝置的應用外也結合了 mobile web 上的一些相關系統,對於資訊載入的速度也是非常的快速,在官網上有提及未來將會提供的功能,像是 Emergency Notifications, My Agenda, Timetable,目前這三個功能已經在 iPhone平台上推出了,相信不久的將來就會在 Android 平台上就能使用到,而 uAlberta 的校園應用確實非常值得我們這些需要開發此種相關應用的人參考。

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger