2011年7月28日 星期四

在 MapView 中新增一個 View

當點擊地標後,如果需要顯示一個按鈕,那就需要另外加入一個包含著按鈕的 View ,而在本篇則會記錄一下如何利用 Layout 產生一個客製化的 View ,並加入至 MapView 中顯示。Layout 部分 pop.xml 原始碼 :<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView android:layout_height="wrap_content" android:text="TextView" android:layout_width="wrap_content" android:id="@+id/textView1"></TextView><Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button></LinearLayout>...

2011年7月27日 星期三

2011-07-27 UCampusMap 功能畫面

本篇僅是目前地圖功能的畫面與記錄,因為未來的資料庫會有變動,所以暫時將目前的狀況做一個簡單的記錄,以供之後做參考。目前程式撰寫的部分著重在未來擴充性及維護的設計面上,而非功能性或畫面美觀,所以在這個版本與前一個版本的功能上差異並不大。Map 基礎物件簡介目前 Map 的架構下,在新增不同類型的地標時比之前更為容易,除了原本負責向 DB 要資料的 queryDB 這個類別外,還有 MarkerOverlay 類別負責建立地標圖層和 MarkerPoint 類別負責存取地標資訊。queryDB 類別接收到 query 的位址或是包含需求欄位與判斷值的要求,向遠端的 AP 做查詢的要求,並取回 JSON 格式資料,此 JSON 資料將存在於 queryDB 物件中,經由操作 queryDB 物件可以取出查詢到的資料甚至於將 queryDB 中的 JSON 物件取出。MarkerOverlay 類別在建構 MarkerOverlay 物件時,可以依照不同類別的資料創建,代表著不同類別的資料分別放在不同的圖層中,方便未來的維護;而在點擊地標時可將地標移至畫面中央,並跳出一個可點擊的按鈕,經由點擊此按鈕得到更多相關的資訊;點擊按鈕後的相關資訊由另外的類別作維護,將建構地標的資訊以及地標本身所包含的資訊做分割,好處在於可以需要的時候再向 DB 作要求,一方面可以減少 query 時傳遞的資料量,另一方面也可以降低行動裝置內存在著許多不需要的資訊。MarkerPoint 類別繼承自 GeoPoint...

Google Map ItemizedOverlay 使用

這個部分會來簡介一下如何使用 ItemizedOverlay 來達到放至地標在地圖上,並且點選地標可以顯示相關訊息的功能。ItemizedOverlayItemizedOverlay 是繼承自 Overlay 的抽象物件,所以也必須要先實做,當實做 ItemizedOverlay 時,除了建構子外有兩個必須要覆寫的方法,一個是 creamItem() 另一個是 size() ,如果需要對地標做點擊的動作,那就需要再覆寫 onTap() 這個方法,首先來看一下完整的原始碼 (此處把 import 的部分刪除) :public class exMap extends MapActivity { /** Called when the activity is first created. */ GeoPoint mGeoPoint01,mGeoPoint02; ArrayList<OverlayItem> items = new ArrayList<OverlayItem>(); Context mContext; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MapView mMapView = (MapView)findViewById(R.id.mapview);...

2011年7月26日 星期二

Google Map Overlay 使用

當使用 Map 時需要在地圖上使用一些座標圖示或是繪圖等功能,這時候就需要在原本的地圖上加上圖層,利用圖層就可以達成並且可以針對不同的圖層給予不同的功能,方便於管理與設計。OverlayOverlay是一個抽象類別,所以必須在使用前,先建立一個繼承自此抽象類別的自訂圖層類別,並將需求的功能實做,這裡用一個簡單的例子來說明如何使用圖層,範例功能將利用圖示顯示 animateTo(GeoPoint) 所設定的座標。原始碼 :package com.nchu.exMap;import java.util.ArrayList;import java.util.List;import com.google.android.maps.GeoPoint;import com.google.android.maps.MapActivity;import com.google.android.maps.MapController;import com.google.android.maps.MapView;import com.google.android.maps.Overlay;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Point;import...

Android 上使用 Google Map API

當新建一個 Android 的專案時,可以選擇要使用的 API 版本,要注意的是一般的 Android API 版本並不包含 Google Map API,所以當需要使用到 Google Map API 時則需要選擇 Target name 為 Google APIs 的選項,並配合所需要的版本,使用前還必須申請一個 Android Map API Key。申請 Android Map API Key申請 Key 必須要有系統的證明書以及一個 Google 帳號,測試用的可以利用 Debug 的證書,不過未來如果需要發佈的話,則需要一份利用所要發佈的程式產生的 MD5 證書,並利用此證明書去申請 Key 之後才能發佈。詳細申請步驟可以參考 Google 說明頁面 : Obtaining a Maps API KeyDebug 證書的路徑在 Eclipse 中選擇 Windows > Preference > Android > Build,其中的 Default debug keystore 的值就是 debug.keystore 的路徑。得知此路徑後就可以利用 keytool 指令取得MD5值,指令為 keytool -list -keystore debug.keysotre 。接著利用剛剛取得的 MD5 碼,可以至 Google Map API key 申請頁面上申請 key,只要將取得的 MD5 碼填入並按下產生即可取得。Google Map API 簡介Google...

2011年7月20日 星期三

搜尋Flickr上相關照片

本篇會針對如何使用 Flickr API 做相片搜尋的動作,以及如何在 Android 平台上取用這些資料。簡介簡單的來講 Flickr API 是一種 WEB API,呼叫的方式是透過 Flickr 提供的網址,並在網址後面接上所需的參數;要使用這些功能前必須先向 Flickr 申請一份 key ,除了申請的 key 之外 Flickr 還會給予一個密鑰,不過在這個搜尋的過程中我們並不會使用到這個密鑰,只會使用到 Flickr 所給予的 key。申請 key 前必須先擁有 Flickr 帳號。API KEY 申請頁面要使用 Flickr API 除了可以直接使用 Flickr 本身提供的方式之外,也可以利用第三方所開發的 framework 做使用,在 Flickr 頁面上有提供一些第三方工具連結,但官方是宣稱不保證使用的風險,除此之外這邊所用到的 API 並不多,所以還是直接利用 Flickr 所提供的方式。Flickr 的要求格式分別為 REST、XML-RPC 與 SOAP 三種不同的方式,在這邊我們所使用的是 REST 方式,也就是剛剛提到的直接將所需參數接在網址後面;並且使用 REST 方式呼叫的話,預設也將以 REST 的格式回覆,但回覆的格式可以利用 format 參數做設定。回覆的格式有五種 : REST、XML-RPC、SOAP、JSON 及 PHP。此處使用的是 JSON 格式,一方面再使用 PHP 及 JavaScript 開發時較方便,另一方面也可以讓...

2011年7月14日 星期四

關於Drupal新增content時的資料表變動

目前後台的部分是使用 Drupal 作開發,而行動裝置抓取資料必需直接向資料庫要求,所以對於 Drupal 新增 content 時相關的資料表做了一些觀察。觀察的環境為 TWAMP 的安裝包,使用版本為 6.22 版,並且安裝了 CCK 及 Views 這兩個基本的模組,所以資料庫的結構上就是依照這樣的安裝所產生的,總共的資料表數量為61個,觀察的資料表為 content 以及 node 這兩個字串為開頭的資料表。新增 content 類型首先來看,新增一個 content 類型後,在 node_type 中會新增一筆資料,這筆資料代表的就是剛剛新增的 content 類型,並且此類型的相關設定都會存放在這。新增 field接著在此 content 類型中新增一個 field ,新增完這個 field 後,資料庫中會新增一個資料表,資料表的名稱為 content_type_"ContentType名稱" ,而裡面暫時不會有值,至於會有哪些欄位就視不同的 field type 而不同,最基本的欄位會有 nid 及 vid 。譬如新增的 field type 是 Node reference 的話,那會多一個 field_"連結的node名稱"_nid 的欄位,記錄著連結到哪個 node,而有些 type 則會在未來新增內容時才做動作。除此之外 content_node_field 及 content_node_field_instance 這兩個資料表,也會新增一筆與 field 設定相關的紀錄,而這兩個的差別在於 content_node_field 像是物件導向概念裡的類別,而 content_node_field_instance 則是經由類別創建出的實例,content_node_field 紀錄的是一般的設定,此設定可套用到其他的 content 類別,content_node_field_instance...

2011年7月12日 星期二

版本控制

未來的 Campus 的開發會利用 SVN 作版本控制,目前暫時先將 SVN Server 架在自己的機器上,以後如果有架設開發主機再將這些資料轉移過去。SVN Server 軟體使用的是 VirsualSVN SERVER Standard Edition 安裝快速使用上也很方便,Client端的軟體則使用 TortoiseSVN 做檔案總管的整合,並且在 Eclipse 上安裝了 Subclipse 插件方便專案的提交與更新等動作。在這個環境中使用 Eclipse 開發 Android 專案,可以很方便的利用 SVN 做版本控制外,也可以利用檔案總管直間觀察是否有未更新檔,或是直接更新其他未使用 Eclipse 開發的程式或文件,像是 PHP、HTML 或是 PDF 等檔案。這裡需要注意的是 Eclipse 裡面的設定,記得在專案的 Build Path 中設定,將 .svn 檔案排除在 Build 之外,這樣做是為了避免 Android 把版本控制的檔案當成是專案的一部分,而嘗試進行編譯的動作,導致錯誤無法執行。實際的設定位置在 Project > Properties > Java Build Path,點選 ****/src 裡的 Excluded ,並且將 **/.svn/** 字串加入至 Excluded(字串包含 * ),如此就可以將.svn檔案排除...

2011年7月7日 星期四

Android 利用 PHP 連結 MySQL

網路上有許多連結資料庫的方法,像是利用JDBC直接連結資料庫或是透過 web server 代為取得資料,在這裡提到的是後者,下圖為實際的操作環境。本篇所使用的環境套件為 Mysql、Apache、PHP,在此除了利用PHP向DB要資料外並將取回的資料轉成 JSON 格式,接著利用 HTTP 協定傳遞給 Android 程式,接下來將詳細介紹中間的執行步驟及該注意的事項。首先我們來看一下 PHP 如何向 Mysql 取得資料:<?php mysql_connect("資料庫位置","使用者名稱","使用者密碼"); mysql_select_db("資料庫名稱"); mysql_query("set names utf8"); $q=mysql_query("SELECT phone_value from news where id='".$_POST['id']."'"); while($e=mysql_fetch_assoc($q)) $output[]=$e; print(json_encode($output)); mysql_close();?>mysql_connect : 建立與mysql的連線。mysql_select_db : 選擇要使用哪一個資料庫。mysql_query : 設定語系,避免取回的文字呈現亂碼,並且設定 SQL 語法。mysql_fetch_assoc : 利用 SQL 語法取回要求的資料。json_encode : 利用 json...

Pages 71234 »
Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger