跳到主要內容

發表文章

目前顯示的是 2012的文章

Facebook SDK Open Graph 全攻略(一)

大家好, 我是奶綠茶
身為一位快樂的打字人員(誤), 是一定要會 FB Connect 的啦
所以小弟就決定來來寫一系列的教學
因為 FB 規格像月亮,初一十五不一樣 ,
所以寫一下撰寫日期, 2012 / 12 / 27
免得日後改版讀者看到舊的文章


教學使用的都是 JavaScript SDK 來開發

1.先成為 Facebook 開發人員, 需要電話認證。
https://developers.facebook.com/apps

2.建立新的應用程式




應用程式名稱:可以中文, 視別用
應用程式名稱空間:app.facebook.com/ XXXX , 通常會取一個短又好記的, 不可中文
網站管理:這個沒研究, 先不管
然後按下繼續



完成後, 就可以看到建立的應用程式
接著還可以再編輯設計




App ID:這個應用程式的唯一 ID 值, 初始化時會用到
App Secret:暫時先不管
基本資料料:就打一打吧
Display Name:就是你的應用程式名稱, 使用者 Connect 時就會出現

選擇你的應用程式如何跟 Facebook 結合
以 Facebook 登入網站:
如果你的網站是放在自己的 Domain, 想要有 FBConnect 的話, 就在這輸入
因為開發時, 一定都要是在 http 下才行, 可以在自己的本機架一個 localhost 會比較快
等正式上線再換網址即可

Facebook 上的 App:
如果你的應用程式是要掛在 app.facebook.com 下的話, 就要在這輸入
像開心農場那樣, 外框是 Facebook , 裡面是你的內容
一樣填上網址, 記得, 就算你只是要放在 FB 裡, 還是要填寫上"以 Facebook 登入網站"
不然一樣不給連。

手機版網頁:同以 Facebook 登入網站

原生 iOS 程式:給 iOS 用的

原生 Android 程式:給 Android 用的,之後幾篇會介紹到。

Facebook 上的 App:

Facebook 會用 iFrame 把你包進來

Mobile Web:手機版網站用

Native iOS App:ios 原生程式用

專頁分頁:在粉絲團裡的分頁用

注意喔,如果是掛在 app.facebook.com 下的應用程式(分頁也是),
你的 Domain 一定要是 …

新案上線:海尼根140年紀念瓶

大家好,我是奶綠茶
新案上線:海尼根140年紀念瓶
http://140bottle.heineken.com.tw/
這次練習了使用 css + js 來製作網頁
只有聲音的部份使用到 flash 來控製
並使用 ShareObject 來記錄使用者是否關閉了聲音
這樣下次進來時,就不會自動播放,貼心吧,嘿

 JS 裡實作 Command Design Pattern
身為一位專業的開發人員,是一定要學會的
同時還加入行動裝置的判斷並製作了手機版的網頁
http://140bottle.heineken.com.tw/m/

地址也加入了台灣縣市路名
待整理好了再將原始碼分享出來

(刷機)SamsungGalaxyTab8.9 P7310 吃 ICS

大家好, 我是奶綠茶
台灣的 SamsungGalaxyTab8.9 一直等不到官方的升級 4.0
所以就手動自己來刷機吧

刷機有風險, 不怕死的往下看
刷上官方的 4.0 ROM
教學都是參考這個網站
點我
4.0 跑起來比原本三星的 3.0 順很多, 呼, 值得
接著要完美演出, 再補刷三星中文輸入法
點我







如果想換個口味, 刷上 CM10 的話
點我
忘了拍照

以上二個 ROM 我都有試刷成功
祝大家使用愉快

因為平版沒有外接式 SD卡,
想在 Recovery 模式下將檔案copy 進去的話
可以使用 adb 指令
adb push "本機端檔案路徑" /sdcard/
最後一個斜線一定要加, 不然無效
轉載請註明出處

FP11.4 Worker 多執行序

大家期待以久的 Flash 多執行序來了(還是只有我在期待)
在之前 Flash 只要有程式塞住, 就會整個像死檔一樣的掛掉
現在多了執行序的幫忙, 可以把較吃效能的動做交由背景來除理
這樣就不會影響本來的動畫
筆者寫的 Demo 就是用 Sound 類別的 extract, 把整首 mp3 轉成 ByteArray , 好來製作加速播放功能,之前在轉換的過程,會整個卡住
用了 Worker 多執行序就可決解這樣的問題
線上 Demo, 請確定你的  FlashPlayer 為 11.4 以上的版本才看的到
https://dl.dropbox.com/u/2069696/blog/index.html?s=2012_10_09_FP11_Worker/worker
轉載請註明出處
/** * @author milkmidi */ package { import com.bit101.components.HUISlider; import com.bit101.components.PushButton; import flash.display.DisplayObject; import flash.display.Sprite; import flash.events.Event; import flash.events.SampleDataEvent; import flash.media.Sound; import flash.system.MessageChannel; import flash.system.Worker; import flash.system.WorkerDomain; import flash.text.TextField; import flash.utils.ByteArray; import net.hires.debug.Stats; import swc.milkmidi.Intro_mc; public class LoadSoundExtract extends Sprite { static public const BYTES_PER_CALLBACK:int = 4096; private var samplesData:ByteArray; …

Flash AS3 阻檔 Event 事件

設計有個元件 box 偵聽 CLICK 事件 而 stage 也偵聽 CLICK 事件 當點擊 box 時,二個事件都會發生 如果要避免這樣的問題 解法很簡單,只要使用 Event 裡的 stopPropagation() 就可以中斷之後的事件, 這樣 stage 就不會接收到 package { import flash.display.Sprite; import flash.events.MouseEvent; public class EventTest extends Sprite{ public function EventTest() { var box:Sprite = new Sprite; box.graphics.beginFill(0xff0000); box.graphics.drawRect(0, 0, 50, 50); box.graphics.endFill(); box.addEventListener(MouseEvent.CLICK , onBoxClickHandler); addChild( box ); stage.addEventListener(MouseEvent.CLICK , onStageClickHandler); } private function onBoxClickHandler(e:MouseEvent):void { e.stopPropagation(); trace("onBox Click"); } private function onStageClickHandler(e:MouseEvent):void { trace("stage Click"); } } }

決解在Chrome裡無法使用 Flash PrintJob 的問題

大家好,我是奶綠茶
最近在使用 Flash PrintJob 時,突然遇到了這樣的問題
Chrome 使用Flash PrintJob 時,會啟動自身的列印功能
然後就一片白

後來想法一個解法, 大至如下
1.在 html 先放一個空白的 img
2.Flash 先將畫面 Draw 成 BitmapData ,再轉成 JPGEncoder 的 ByteArray
再轉成 Base64 字串
3 把 Base64 字串透過 JavaScript 丟進去剛剛產生的 img 標籤
4 呼叫 Html 裡的列印

這個 Bug 只會發生在 Chrome 內建的 Flash Player
如果你有裝自行安裝的 Flash Player 的話
可以在網址列輸入 chrome://plugins
然後重新啟用預設的 Player


線上 Demo:
https://dl.dropbox.com/u/2069696/blog/2012_08_29_ChromePrintBug/index.html

SourceCodeDownload 後來找到更快的解法了, 把要印的 Clip 物件 先加到 stage 上 印剛後, 移掉他 這樣就可以單用 AS Code 決解

2012 08 24 AS讀書會影片文章分享

分享一下小弟在 2012 08 24 AS讀習會的影片
主題是:原生大戰 Adobe AIR
PPT:
http://www.slideshare.net/milkmidi/2012-08-24nativevsadobeair

影片:
http://www.youtube.com/watch?v=Gz27YtVazso&feature=youtu.be

因為時間的關系, 有些地方快速帶過
如有不懂或不清楚的,歡迎留言指教
謝謝大家

Unity3D 呼叫 Android 端 Java 程式

大家好,我是奶綠茶
最近開始研究 Unity3D,
今天來分享如何使用 Unity3D 呼叫 Android 端的 Java 程式
或是 Android 呼叫 Unity3D

因為 Unity 編譯成 Android 平台時, 會發怖成 apk 檔, 並沒有原始碼
所以製作上有一點點的麻煩

1.新增一個新的 Android 專案
2.從 Unity 安裝路徑下 Unity\Editor\Data\PlaybackEngines\androidplayer\bin\
複製 classes.jar 至 Android 裡的 libs 資料夾下


3.寫一個 public 的函式給 Unity 呼叫
這邊要注意一下, 當 Unity3D 呼叫 Android 的函式時, 會因為 UI Thread 安全性關系, 所以不能彈出 AlertDialog, 需要透過一個 Handler 來決解這個問題
package milkmidi.unity3d.android; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Menu; import com.unity3d.player.UnityPlayer; import com.unity3d.player.UnityPlayerActivity; public class MainActivity extends UnityPlayerActivity { public static final int SHOW_ALERT_DIALOG = 0; private Handler mHandler = new Handler(){ @Override public void handleMessage( Message msg ) { super.handleMessage( msg ); switch ( msg.what ) { case SHOW_ALERT_DIALOG: …

Flex mxmlc Error: could not find a JVM

大家好, 我是奶綠茶
最近在使用 Flex 要匯出成 swc 時
發生了
Error: could not find a JVM 及
Error loading: C:\Program Files\Java\jdk1.6.0_25\jre\bin\server\jvm.dll
查了一下, 是因為 WIN7 64 預設是抓 Java 64 SDK , 但 Flex SDK 並不支援 64 位元
修改方法如下:
進到你的 Flex SDK\bin\
找到 jvm.config
裡面有段 java.home 變數, 預設是空值
換成你的 32 位元的 Java SDK 路徑即可

java.home=C:/Program Files (x86)/Java/jre6

注意斜線不要打錯了


刷機 Runny Rom - N1 Version [Sense 3.5]

大家好, 我是奶綠茶
玩 Android 的樂趣就是可以不斷的刷機, 刷出歡樂, 刷出愛
但有時會刷出磚塊。
刷機有一定風險, 後果請自行負責
機子:Nexus One 
ROM:Runny Rom - N1 Version [Sense 3.5]
http://forum.xda-developers.com/showthread.php?t=1580873

首先你的機子要先 root
最好先練習刷 CM7
http://www.cyanogenmod.com/blog/cm7-nightly-builds
因為好上手, 也較不會失敗

這個版本的 ROM, 就是擁有 HTC Sense, 跑起來不算快, 但還可以接受
需求:
Requirements:
Full wipe before install.CM7/r2 Hboot or Stock HBOOTEXT4 Partition - Minimum 1GB.HIGHLY RECOMMENDED 4EXT RECOVERY TOUCH
1. 進 Recovery , 清掉所有的資料
2. 如果你刷過 CM 系列的話, 第二個就可以不管
3. 切 SD , Partition 至少要有 1G
這篇有完整的教學:
http://zakipush.blogspot.tw/2012/01/minitool-partition-wizardext3ext4.html#.UBJoLLSis1I

4.刷 4EXT Recovery , 一定要用這個版本, 不然 ROM 刷進去後也無法啟動
5.開心的把 ROM 刷進去吧, 完成後, 第一次開機會有點久, 請等待






Android 4.x, 確定與取消

大家好,我是奶綠茶
不知道大家有沒有注意到在 Android 裡的 AlertDialog 
確定鍵與取消鍵
4.x版:確定鍵在右邊
其他版:確定鍵在左邊
二者是不一樣的
有時會自製 AlertDialog
這時應該也要注意一下使用者的習慣, 這樣的使用者介面才會是完美
那要怎麼決解呢?
其實很簡單的
4.x版的 layout ,只要放在 res / layout-v14 / 裡, 然後把你的確定鍵放在右邊
其他版的 layout 就放與預設的 res / layout 裡即可
系統會自動判斷使用者的 SDK 版本去抓對映的 layout

Android 超好用的 ValueAnimator Tween類別

大家好,我是奶綠茶
在開發 Android, 經常會需要做一些動畫
在新版的 SDK 裡有個 ValueAnimator 可以使用
法簡單好學, 寫起來跟 Flash 的 TweenMax 差不多, 這就是我們要的
可惜官方說需要 SDK 11 以上的機子才能跑
經過測試也還真的需要 11 以上, (11 是代號 HoneyComb)
後來想到 Android 是 OpenSource, 就把他的類別拿來改一下, 這樣就可以在 2.2 的舊機子上使用

轉載請註明出處
bounceAnim = ValueAnimator.ofFloat( 起始值, 目標值); bounceAnim.setDuration( 1500 ); // 時間 bounceAnim.addUpdateListener 偵聽更新事件。 看吧,簡單好學, 不過這樣的方法依然無法使用 ObjectAnimator 這個類別, 反正 ValueAnimator 就己經夠用了 以下程式碼是改至官方提供的 API, 我把他改成 2.2 也可以跑的範例 package milkmidi.demo; import java.util.ArrayList; import milkmidi.android.animation.ValueAnimator; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RadialGradient; import android.graphics.Shader; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.OvalShape; import android.os.Bundle; import android.view.View; import android.view.animation.AccelerateInterpolator; import android.widget.Butto…

Flare3D SwitchColorFilter

大家好我是奶綠茶,
最近在研究 Flare3D, 已經有許多不錯的作品
看到了一個換色的效果很炫,Google 後找到了相關的技術文章

http://www.nissan-stagejuk3d.com/
nissan 就有用到這個效果, 該網站是使用 Away3D

參考文章:
http://blog.volger.org/switchingcolor-shader/

Demo:
https://dl.dropbox.com/u/2069696/blog/index.html?s=2012_06_15_Flare3D_switchcolorfilter/flare3d

轉載請註明出處
SourceCodeDownload

Adobe AIR application.xml

大家好,我是奶綠茶
最近在開發 App 時,
當有新版本時,要提醒使用者下載
每個 Adobe AIR 都需要一份 application.xml 的說明文件
裡面會定義 versionNumber 和 versionLabel
在執行階段該如何抓其變數呢?
用以下方法即可




var appXML:XML = NativeApplication.nativeApplication.applicationDescriptor; var ns:Namespace = appXML.namespace(); var versionNumber:String = appXML.ns::versionNumber; log("versionNumber = " + versionNumber); var versionLabel:String = appXML.ns::versionLabel; log("versionLabel = " + versionLabel);

Android Apk 反組譯與加工

大家好,我是奶綠茶
今天來討論關於 Android 反組譯與加工
反組譯工具有很多,在這使用的是
apktool

下載apktool1.4.3.tar.bz2,及apktool-install-windows-r04-brut1.tar.bz2
解開後,把三個檔放在同資料夾下

進入 Command 模式

反組譯 APK。
apktool d 你的檔案.apk輸出的資料夾名稱

然著你就可以修改裡面的檔案
重新包裝成 APK
apktool b 輸出的資料夾新的檔名.apk


寫入簽屬檔,這樣才可以上架
jarsigner -verbose -keystore 你的.keystore新的檔名.apk簽屬檔名稱
完成

最近有專案使用 Adobe AIR 開發,呼叫原生系統的 AlertDialog(或其他的Dialog) 時
在 Android  3.0 以上, 樣式還是長成 2.2, 客戶不喜歡
查出問題點是出在 AIR 包裝時,會在你的 AndroidMainfest.xml 加入
activity android:theme="@style/Theme.NoShadow"
就是這個 theme 語法。
但 AIR 目前又不充許你修改,
只要用上面的方法,把 theme 拿掉即可

轉載請註明出處
參考文章:
http://pervasivecode.blogspot.com/2011/11/phonegap-build-editing.html

米蘭數位 2012 暑期實習生招募 ‧ 用click點燃青春

米蘭暑期實習生招募 ‧ 用click點燃青春

想要擁有充實、又進步神速的暑假嗎?
想要一窺數位創意產業的職場生態嗎?
迎接未知挑戰,你總是熱血翻騰、躍躍欲試嗎?
米蘭就想要尋找這樣的你(指) 
快送出你的履歷 這個暑假,你將有機會變得不一樣!(耀眼)

想了解米蘭
快加入米蘭文化 報名網址:http://medialand.com.tw/blog/article.asp?id=1405

PV3D班課程原始碼分享

大家好,我是奶綠茶
幾年前熱血的 PV3D ,
到了現在已經不夠用了。
因為 PV3D 是使用數學式運算, 來仿 3D 效果
而現在 Flash 已經支援硬體加速的 3D 效果。
所以就把2010年的 PV3D班課程原始碼分享。
雖然是舊技術, 但裡面的程式碼觀念還是很讚的喔
學起來後, 要轉戰其他新的 3D Engine 是很快的。
祝大家學習愉快。
範例搶先看:

http://www.flycan.com/pv3d_2010_06_webDemo/

檔案下載:
http://www.box.net/shared/3jfvp9iud3
密碼:milkmidipv3d201006
謝謝大家

Android App 程式開發入門班

大家好,我是奶綠茶
經過每天熱血的研究 Android
小弟我終於備好課程啦
Android App 程式開發入門班
完美的入門功略

首先你要

1.至少寫過任一 OOP 物件導向程式語言
2.對 CLASS 類別有一定基礎者
3.學員需自備 Android 手機,方便實機開發,因為模擬器真的太慢了...

一起來狂熱 Android 吧


開發己上架過的 App

AXE EffectHeineken 海尼根WP7Contact liteWP7Contact Pro
報名處:
http://www.flycan.com.tw/course/android_app.php

Adobe Edge 動畫工具

大家好,我是奶綠茶
因為怕失業(誤), 所以認真的學起 css 和 Javascript
剛好手上有一個需要製作成 iPad 版的網站
但如果要用 Code 刻出來動畫好像有點不人性
好在 Adobe 即將推出一個 Html 動畫工具
可以到這兒下載 Preview 版
http://labs.adobe.com/technologies/edge/
軟體介面使用上, 有點像是 AE + Flash
一樣的時間軸, 一樣有 Keyframe ,
只是最後是輸出成 html 的格式
個人覺得最貼心的點
是整合了 jQuery
這樣程式人員就可以後續接手來完成其他的功能
真的大心呀
因為目前還是 preview 版, 所以奶綠我在開發時, 經常發生當機或一些小問題
我想正式版的推出一定會更好

專案:Toyota PriusC
http://m.toyota.com.tw/2012_prius_c/index.asp
請自動將版面拉成 1024 x 768
IE請勿入內


Black Berry Bold 9900 雪白黑莓機初體驗

大家好,我是奶綠茶
奶綠茶我很榮幸的受邀參加 BlackBerry Bold 9900 耀白降臨部落客體驗會,
地點選在相當優雅的 Bianco Taipei, 整個家以白色系為主,和今天的主題非常的搭配
先列一下目前市面上主流的知慧型手機系統
iOS,
Android,
Windows Phone
Black Berry
前三個大家應該都不莫生。
這就來簡單的介紹 BlackBerry。
在台灣通稱"黑莓機"
發展也很多年了,大多的使用者都在美國、歐洲等地,
以商務人士為主要組群,
其中最大的賣點就是:BlackBerry Messager
有點像是現在的 What's app, 但他強大的加密機制(安全,安全,很難破解),
還有優化的檔案壓縮技術(國外並沒有所謂的上網吃到飽, 所以檔案大小就變的非常重要)
都是其他系統很難取代的。

開發程式:和 Android 一樣是使用 Java 來開發

外型:

就跟 ShowGril 一樣的正(羞)

三白比一比:

左到右為
Galaxy Note , BlackBerry , 水果四袋s


解悉度為 640 x 480 , 字體大小看起來很舒服

這是 BlackBerry 的桌面, 有點類似 Android , 可以再展開


展開後的樣式, 左右拉動, 可以切換分類, 可以把常用的 App 加到我的最愛


市集:BlackBerry App World
就像是iOS的 App Store
Android 的 Google Play 一樣
都可以透過市集來下載 App.
目前數量約為 6 萬, 相較之下算是比較少的

App World 主畫面, 如果有可更新的 App, 在 My World Icon 上就會有一個小紅星

新增連絡人

有個特別的欄位:BlackBerry PIN
只要對方也是使用 BlackBerry, 就可以透過這個 PIN 碼把 BlackBerry Message 串起來

地圖:

看起來是使用自家的Map, 但可到市集下載 GoogleMap 來使用

當天參加抽中大獎的邦邦

這張重點是邦邦, 不是 Show Girl(羞)

使用心得:
多了鍵盤,打起來字真的還滿快的
系統使用起來真的很順,不會發生卡卡的現像
一樣可以開發應用程式來賣(是不是一樣是七天鑑賞期, 就要問該死的天龍國政…

PC 上使用 Adobe AIR 開發 iOS App

大家好,我是奶綠茶
今天來分享如何在 PC 上使用 Adobe AIR 開發 iOS App
1.成為 apple 開發者
2.在 Mac 上產生一組有效的 p12 檔
3.在 pc 上安裝 openssl
4.在 pc 上把 Mac 產生的 p12 檔, 使用 openssl 再產生一組給 pc 用的 p12 檔
可以參考 adobe 的官方教學
http://help.adobe.com/zh_TW/as3/iphone/WS144092a96ffef7cc-371badff126abc17b1f-7fff.html
但其中有一段 Code 有誤


如果您使用的是 Mac 電腦上的鑰匙圈專用密鑰,請將它轉換成 PEM 密鑰: openssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem
把本來的 mykey.pem 改成 mykey.key
這樣就可以產生出有效的 p12 檔
祝大家學習愉快


參考文章:
http://www.codeandvisual.com/2011/exporting-for-iphone-using-air-27-and-flashdevelop-part-three-generating-developer-certificates-provisioning-profiles-and-p12-files/

android C2DM 推播功能

大家好,我是奶綠茶
今天來介紹如何在 Android 寫推播功能
Android 上的正確名稱叫:C2DM
官方網址:
http://code.google.com/intl/zh-TW/android/c2dm/
看一遍,跟著做,就差不多可以完成
那要怎麼測試呢?
好在有好心人事寫了支測試程式
http://www.riaspace.com/2011/09/as3c2dm-air-native-extension-to-push-notifications-with-c2dm/
該作者提供了一個 C2DMManager 的 AIR 桌面應用程式,方便你自己發送
經筆者測試,成功。
祝大家學習愉快

Native Android Admob Support For Adobe Air

大家好,我是奶綠茶
最近想在 Adobe AIR App 放上 Admob 的廣告
查了一下相關文章,最好的方法還是使用原生的類別
好在 AIR3.0 後已經可以呼叫原生程式
接著就可以開始來實作。

1.首先你要先知道如何在 Android 上放 Admob
參考官方教學
https://developers.google.com/mobile-ads-sdk/download

2.使用原生程式,開發出 AIR 可以呼叫的 jar 檔
這裡要注意的是,開發時要匯入 Admob的jar
但匯出時, 並不會把該 jar 包進去
所以最後還需要下個 Command 把二個 jar 合拼成一個(這個我卡了好久)

3.AIR端使用 ExtensionContext 類別
開發工具為 FlashDevelop 4.0
加上 Ant 外掛(用來快速執行Command)





APK下載
轉載請註明出處
SourceCodeDownload

台灣街道路名表

大家好,我是奶綠茶
最近在專案上
客戶希望在下拉縣市地區時,能再多個街道選項
查了一下郵局,並沒有提供這樣的資訊
好再有隻 api 可以呼叫。
但考量會有跨網域呼叫的問題,
索性就把全部的資料抓下來, 丟到自家的資料庫
有需要的朋友,可以點這下載
http://www.box.com/s/0rxretjif715dq12t5rb

補充:郵遞區號並不是唯一的 Key 值
像 新竹市 , 有 東區、西區、香山區, 但郵遞區號都是 300
呼叫的 API 是這隻

http://www.post.gov.tw/post/internet/f_searchzone/streetNameData.jsp
(直接點是無效的, 請用任意程式用 POST傳值)
city:臺北市
cityarea:信義區
就會得到該區的街道XML

新案上線:Heineken海尼根 Android App

大家好,我是奶綠茶
新案上線:Heineken海尼根 (iOS/Android)
這次小弟是開發 Android 的 App.
使用原生 Java 程式寫的, 不是用 air 喔。
這次的專案,讓我經驗值大增呀
之後再來補上這次用到的技術文章

點我進入頁面

Android 檢查網路是否連線中

大家好,我是奶綠茶
如何在 Android 檢查網路是否連線,
可以使用以下程式判斷:
public static boolean isNetworkAvailable( Context context ) { ConnectivityManager cm = (ConnectivityManager) context .getApplicationContext().getSystemService( Context.CONNECTIVITY_SERVICE); if (cm == null) { return false; } else { NetworkInfo[] infos = cm.getAllNetworkInfo(); if (infos != null) { for (NetworkInfo networkInfo : infos) { if(networkInfo.getState() == NetworkInfo.State.CONNECTED){ return true; } } } } return false; }
但這樣就只能限自行呼叫,如果想要用偵聽的話,可以寫一個 BroadcastReceiver,
同時在 intentFilter 加上 action android:name="android.net.conn.CONNECTIVITY_CHANGE"
public class ConnectionChangeReceiver extends BroadcastReceiver { @Override public void onReceive( Context context, Intent intent ) { boolean isNetworkAvailable = isNetworkAvailable(context); Toast.makeText(context, "isNetworkAvailable:"+isNetworkAvailable, Toast.LENGTH_LONG).show(); } public static boolea…

Android App 版本更新

大家好,我是奶綠茶
如何寫自動版本更新的提示呢?

1.先得到目前的版本:
int versionCode = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;
2.在自動的主機放置一個txt檔,並輸入一個版本號
3.檢查遠端的版本是否比較新
4.是的話,就開始下載
Intent updateIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://xxx.apk")); context.startActivity(updateIntent); context.finish();
轉載請註明出處

Android Intent

在 Android 裡
要呼叫另一個 Activity 時
可以使用
方法1:
Intent intent = new Intent( 目前Activity.this, 目標Activity.class); startActivity(intent); 方法2:可以帶入字串
Intent intent = new Intent(); ComponentName cName = new ComponentName( 目前Activity, "目標Packge+Class的字串"); intent.setComponent(cName); startActivity(intent); 方法3:使用 Action , 需在 Mainifest.xml也加入宣告
Intent intent = new Intent(); intent.setAction("milkmidi.android.IntentAction"); startActivity(intent); <activity android:name="xxx.xxx.XXXActivity"> <intent-filter< <action android:name="milkmidi.android.IntentAction"> <category android:name="android.intent.category.DEFAULT"> </category<</action<</intent-filter> >/activity>

轉載請註明出處

Android Design Preview tool

Android 好用之 Preview tool
你經常在 Photoshop 排好 layout , 想丟到手機上看呈現的畫面嗎
現在 Google 推出一個小工具
就可以把 PC 端的畫面同步到手機上
Windows 和 Mac 皆可使用,大推啦


影片:
http://www.youtube.com/watch?feature=player_embedded&v=WvQrP1szEzg

下載:
http://code.google.com/p/android-ui-utils/downloads/list

Flash座標自動產生器

大家好,我是奶綠茶
最近 Mobile Device 的需求越來越大
設計師們在出 layout 時, 還要自動辛苦的寫座標,
小弟就寫一個 flash 座標自動產生器,
就可以快速產生, 準時下班(誤)

可安裝在 flash CS3 以上的版本
使用方法
下載 mxp 檔,
然後安裝
開啟 flash
把要出現座標的物件,轉成 MovieClip
從 Componenet 面版找到 DisplayPosition

拉到場景上
編譯,完成,出現,下班(誤)

原樣



發怖後


轉載請註明出處

Flash TLF Text Bug

大家好,我是奶綠茶
最近朋友問我一個載入 flash 檔的問題
外部載入一個 swf , 並呼叫裡面一個 public 的函式
這麼簡單的問題,馬上就可以決解,
結果卻花了我半小時,一查之下才發現是 TLF Text 產生的

被載入的 swf 主程式碼
public class LoadedDoc extends MovieClip{ public function LoadedDoc() { trace("LoadedDoc"); } public function test():void { trace( "test"); } } 載入的主程式碼
var loginLoader:Loader = new Loader(); var url:URLRequest = new URLRequest("alert_as.swf"); loginLoader.load(url); loginLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loginPageLoadCompleteHandler); public function loginPageLoadCompleteHandler(e:Event){ var _alertAS:MovieClip = e.currentTarget.loader.content as MovieClip; _alertAS.test(); } 正常來說,這樣寫可以成功呼叫,
但當你的被載入swf有使用新版的 TLF Text時
flash會很好心的幫你多包了一層 Class, 導至就產生了錯誤
用 Flash Decompile 來看一下
使用 TLF Text


使用 Classic Text



目前還想不到解法, 先筆記一下

Android Back Key

大家好,我是奶綠茶
在使用 Android 時,有時會不小心按到 Back 鍵而離開應用程式
理想的操作,應該要有個提示讓使用者知道是否要離開。
只要 Override Activity 的 onKeyDown 事件,
加上提示的程式即可
常用的方法有二個,
1. 使用 Toast 提示,在一定的時間內按二次 Back 鍵
private long exitTime = 0; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){ if((System.currentTimeMillis()-exitTime) > 2000){ Toast.makeText(getContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { finish(); System.exit(0); } return true; } return super.onKeyDown(keyCode, event); }

2. 使用 AlertDialog ,讓使用者自行決定。
new AlertDialog.Builder( getContext) .setIcon(R.drawable.icon_info).setTitle(" ") .setMessage("確定要離開應用程式嗎?") .setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).setNeutralButton("確定", new OnClickL…

java.lang.OutOfMemoryError: bitmap size exceeds VM budget

大家好,我是奶綠茶
最近在寫 Android 程式時,
一直發生
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
這個問題
後來查了一下,才知道是圖檔太大,超過能使用的記憶體
但透過
BitmapFactory.Options 這個類別就可以決解。
BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = 4; Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);
其中 inSampleSize 的數值,指的是將圖片大小除以 n
重點就要是如何算出正確的數值。
官方文件有提到,該值以 2 的平方為最佳
先準備一張 3000x2000 的圖片,放到 raw 資料夾裡
再沒有使用 inSampleSize 時
直接 decode, 就會發生 OutOfMemory

要算出最佳值,要對圖片 decode 二次
第一次先得到圖片的長、寬,然後再算出 sampleSize ,
第二次再 deocde 得到所需要的圖片
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inJustDecodeBounds = true; //使用這個屬性, 就只會計算,但不會分配記憶體

Bitmap bitmap = BitmapFactory.decodeResource(res, R.raw.i3000x2000,opt);
trace(opt.outWidth,opt.outHeight);//得到原始圖片長、寬

最佳 sampleSize 算法

轉貼至:http://www.maxhis.info/androiding/bitmap-size-exceed/

public static int computeSampleSize(BitmapFactory.Options options,int maxNumOfPixels) { return computeSampleSize(options,-1 , maxNumOfPixels); } public static int …