2012年2月22日 星期三

新案上線:Heineken海尼根 Android App

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

點我進入頁面

2012年2月16日 星期四

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 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;
 }
}
// 在 Manifest.xml 加上
 <receiver 
            android:name="milkmidi.demo.networkstate.ConnectionChangeReceiver"
           android:label="NetworkConnection">
     <intent-filter>
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
     </intent-filter>
  </receiver> 

轉載請註明出處

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();

轉載請註明出處

2012年2月15日 星期三

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>


轉載請註明出處

2012年2月13日 星期一

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

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

原樣



發怖後


轉載請註明出處

2012年2月11日 星期六

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



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