格式化

廣告

廣告2

2013年11月11日 星期一

[Android程式範例] GoogleMaps自定義InfoWindow

[Android程式範例] GoogleMaps自定義InfoWindow

Google Maps v2 自訂地標訊息視窗(InfoWindow)

然後google map的部分要用setInfoWindowAdapter方法替換調原本adapter就可以了!

map.setInfoWindowAdapter(new CMuseumAdapter());

要自己實作一個InfoWindowAdapter介面

2013年11月5日 星期二

[Android程式範例] 從SD卡選擇圖片檔案路徑

在android中選擇圖片

有時候你必須要選擇一張圖片路徑,並且回傳你就可以使用以下的方式

先呼叫這種intent
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 100);   

再來就在原本的activity覆寫onActivityResult方法來做相關處理

2013年10月26日 星期六

[Android SDK特色教學] 遊戲、應用程式中播放背景音樂、背景音效

andorid遊戲、應用程式中播放背景音樂、背景音效

一個遊戲的背景音樂僅僅需要在遊戲運行的時候播放,而在返回到桌面或者進入其他應用使遊戲的activity變為不可見時,都應該立即停止播放所以遊戲的背景音效或音樂播放根本沒必要使用service
有人可能說播放背景音樂應該在後台執行,不能影響程序的正常運行,這樣說當然正確,但這僅需要開一個單獨的執行緒來專門播放音樂就可以了,而經我測試,MediaPlayerSoundPool本身都已經實現了在獨立的執行緒中播放音樂,所以綜上所述在遊戲中播放背景音樂完全沒必要使用 service,那樣完全是捨近求遠,畫蛇添足之舉。只需直接使用MediaPlayer即可。
以下是一個實現遊戲中播放聲音的類別,封裝了MediaPlayerSoundPool的使用細節,所有方法都定義為靜態方法,在程序啟動時先調用其init方法,然後在任何地方都可以非常方便的使用

[Android SDK特色教學] SoundPool播放音效

參考文章:[Android] SoundPool 音效 (一)-http://style77125tech.pixnet.net/blog/post/152442867
  1. 使用SoundPool有限制,播放的音檔不可以超過 「1mb」大小,所以要放音樂就不能使用這一個方法,要使用MediaPlay
  2. SoundPool很容易莫名其妙的自動終止,在使用pause和stop方法時很常很莫名其妙。
  3. SoundPool優點為CPU資源使用率低,反應延遲較少。
  4. 用來播放一些短短的音效、急促的效果音很好用。
  5. 建議使用ogg檔案為音效檔,請先建立資料夾raw放置音效檔案進去。

只要重點3行程式碼就可以播放音效:

[Android SDK特色教學] strings.xml顯示特殊字元

若你在strings.xml定義如下的字串變數
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">'""'''@#$%^&</string>

</resources>

那一定會有很多錯誤跳出來
原因就是不可以直接在strings.xml輸入這些符號來當作字串,而是必須要直接輸入acsii的編碼

以下為常見的ASCII十進制交換編碼:

2013年10月24日 星期四

[Android UI 設計] EditText文字垂直置中

[Android UI 設計] EditText文字垂直置中

LinearLayout有兩個非常相似的屬性:
  1. android:gravity
  2. android:layout_gravity
他們的區別在於:

2013年9月26日 星期四

[Android app開發基本概念] listview 無法點擊/無法響應事件/無法獲得焦點

[Android app開發基本概念] listview 無法點擊/無法響應事件/無法獲得焦點

在Android應用設計與實現中我們通常都會使用到ListView這個控件,系統有一些預設的Adapter可以使用,例如SimpleAdapterArrayAdapter,但是總是會有一些情況我們需要通過自定義ListView來實現一些效果,那麼在這個時候,我們通常會碰到自定義ListView無法選中整個ListViewItem的情況,也就是無法響應ListView的onItemClickListener中的onItemClick()方法,究竟是為什麼呢?

2013年9月23日 星期一

[Android程式範例] http網頁下載檔案或文字

[Android程式範例] http網頁下載檔案或文字

[Android程式範例] http網頁下載檔案或文字

主要在使用時只要一句話! 
呼叫的方法是:

2013年9月20日 星期五

[Android程式範例] GIF動畫播放

android gif動畫

GIF動畫播放


Android中是不支援直接使用GIF動畫圖片關聯播放影格動畫,所以經過前人的試驗,發現說可以利用Movie類別來達到這種功能,隨然本來是用來播放影片的,但其實稍微修飾一下,播放gif動畫也是沒有問題的!

2013年9月19日 星期四

[Android app開發基本概念] 利用PHP連接Mysql資料庫

android mysql json查詢

[Android app開發基本概念] 利用PHP連接Mysql資料庫

示範從android開HttpClient請求post一個id參數到php網頁,然後php網頁收到對id作條件搜尋,將結果編碼成JSON回傳,android收到返回資料後利用JSONArray將其解碼,將資料呈現在listview


其實好像也能用JDBC連,不過貌似比較不耐操!?

本篇所使用的環境套件為 Mysql、Apache、PHP,在此除了利用PHP向資料庫要資料外並將取回的資料轉成JSON格式,接著利用HTTP協定傳遞給Android程式,之後將詳細介紹中間的執行步驟及該注意的事項。

[JAVA教學範例] ArrayList轉StringArray字串陣列

ArrayList轉StringArray字串陣列

2013年9月16日 星期一

[Android SDK特色教學] 影格動畫,Frame動畫

Android平台提供了兩種動畫
  1. 一類是Tween動畫,就是對場景裡的物件不斷的進行圖像變化來產生動畫效果(旋轉、平移、放縮和漸變)
  2. 第二類就是Frame動畫,即順序的播放事先做好的圖像,與gif圖片原理類似。
下面就重點講解一下

Frame Animation (影格動畫、禎動畫)

其實使用起來比較簡單,首先需要創建一個AnimationDrawable對象,通過addFrame方法把每一幀要顯示的內容添加進去,最後通過Start方法來播放動畫。 同時還有設置循環setOneShot等方法可供使用。

要先增加我們的xml動畫定義檔:

2013年9月15日 星期日

[Android UI 設計] TextView元件文字Text加入底線呢?

要如何在Andorid下的TextView元件加入底線呢?


很簡單
只要在string.xml資源檔加入標籤來標記就可以了!
<string name="name"><u>some text</u></string>

如果是要在.java程式碼設定的話:
result.setText(Html.fromHtml("<u>"+getResources().getString(R.string.name)+"</u>"));

2013年8月12日 星期一

2013年8月8日 星期四

[Android程式範例] 判斷某個套件package是否已安裝

  final PackageManager packageManager = getPackageManager();
  List mPackageInfo = packageManager.getInstalledPackages(0);
  for (int i = 0; i < mPackageInfo.size(); i++)
  {
   //獲取到AP包名  
   if (mPackageInfo.get(i).packageName.equals("com.google.android.apps.plus"))
   {
    isInstalling = true;
    break;
   }
  }

[Android SDK特色教學] 意圖Intent Play app至指定的package

有安裝google play的話就開啟程式,如果沒有的話就開啟網頁版的 

String sParam = "com.google.android.apps.plus";

try
{
    // Open app with Google Play app
    intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id="+sParam));
    startActivity(intent);
}
catch (android.content.ActivityNotFoundException anfe)
{
    // Open Google Play website
    intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id="+sParam));
    startActivity(intent);
}

2013年8月5日 星期一

[Android app開發基本概念] SQLite使用儒約日比較日期字串區間

我測試了無數的結果顯示,只有使用儒約日來比較是最完美無缺的!
可能是我的問題吧,我使用了datetime()含式來比較比沒有返回應該的結果。
我也是用了最簡單的BETWEEN來比較某期間的日期,也是沒有返回正確的結果。

2013年7月29日 星期一

[Android app開發基本概念] 偵測網路是否連線狀態

在Android手機中判斷是否連網可以通過 ConnectivityManager 類別的getActiveNetworkInfo()方法判斷,首先獲取網路通訊類的實例 :
ConnectivityManager cm =(ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);


再來可以使用cm.getActiveNetworkInfo().isAvailable(); 來返回是否有效,如果為True則表示當前Android手機已經連網,可能是WiFi或GPRS、HSDPA等等,具體的可以通過ConnectivityManager 類別的getActiveNetworkInfo()方法判斷詳細的接入方式需要注意的是有關調用需要加入以下許可權,同時在一些網路超時的時候也可以檢查下網路連接是否存在,以免浪費手機上的電力資源。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

2013年7月24日 星期三

[Android SDK特色教學] ListView清除/移除所有資料

ListView要更新資料要如何清除原來所有資料?
如何把原來的listview列表中的值先清空?

只要把adapter設為空便可:
   listView.setAdapter(null);

2013年7月23日 星期二

[Android程式範例] 產生和解碼二維條碼(QRCode)與一維條碼(CODE39)

[Android程式範例] 產生和解碼二維條碼(QRCode)與一維條碼(CODE39)

有的應用程式需要將一段字符加密為一個二維條碼,我們可以用一個現成的開源程式碼來幫我們搞定二維碼,這個框架就是Google 自家的Zxing,它已經封裝好了對一維碼、二維碼的編碼和解碼的功能。

2013年7月21日 星期日

[Android SDK特色教學] NetworkOnMainThreadException

在Android 3.0版本之後
對網路存取增加了一些限制不能在onCreate()方法中直接使用網路存取


所以要更改一下作業系統關於執行的政策:

[Android app開發基本概念] https post連線請求建立方法教學


Https與Http類似,只不過Https一般是通過post請求服務器,但是Https與http不同的是Https與服務器會話是處於連接狀態。http則發送請求後連接就會斷開。

另外使用HttpsURLConnection時需要實現HostnameVerifier 和 X509TrustManager,這兩個實現是必須的,要不會報安全驗證異常。然後初始化X509TrustManager中的SSLContext, 為javax.net.ssl.HttpsURLConnection設置默認的SocketFactory和HostnameVerifier。

之後最好要用UrlEncodedFormEntity()方法告訴伺服器 ,你傳進的那些參數值字串的編碼為何。預設的編碼是 ISO-8859-1,不傳的話會把你的傳入的UTF-8中文搞亂了。

 先自己重寫一個SSLSocketFactory類別:

[Android app開發基本概念] ListView中getChildAt()的使用範例


在很多時候ListView列表數據不需要全部刷新,只需刷新有數據變化的那一條,這時可以用getChildAt(index)獲取某個指定position的view,並對該view進行刷新。

注意:在ListView中,使用getChildAt(index)的取值,只能是當前可見區域(列表可滾動)的子項!
  • 即取值範圍在 >= ListView.getFirstVisiblePosition() &&  <= ListView.getLastVisiblePosition();
  1. 所以如果想獲取其他的部分將會出現返回Null值空指針問題;
  2. getChildCount跟getCount獲取的值將會不一樣(數量多時);
  3. 如果想更新某一行數據,需要配合ListView的滾動狀態使用,一般不滾動時才加載更新數據
範例程式: