Archive

文章標籤 ‘android’

關閉Android預設(原生)瀏覽器後session及cookie的保留注意事項

2013年4月23日 尚無評論

一個很簡單的session及cookie幾乎花上了我快一天的時間當然要特別寫下來紀念一下…^^||

有一定網頁開發經驗的人都應該知道,網頁使用session時,一般在關閉瀏覽器後再重啟,因為session ID不同所以就算失效了,但目前發現android預設的原生瀏覽器(採用webkit引擎)在關閉瀏覽器後再重啟,原session 還是存在,但在iphone上用safair就和電腦上的情況是一樣。

後來改用cookie設定max-age 的有效期(expire) 為session就是關閉瀏覽器後也會自己失效,沒想到也是一樣的情況,最後確認當手機重新啟動後再試同樣的流程,session及cookie(效期是session)的就會都失效了

以上測試的手機android版本為2.3.7 , 4.x ,有motorola的defy,samsung的S2,HTC z710e,SONY的xperia z都是一樣的結果。

所以結論是在android原生瀏覽器上,可能是為了方便還是覺得手機是個人化的用品,所以當離開瀏覽器後並不會讓sessoin scope的session & cookie失效,但其它瀏覽器,例如:dolphin(海豚),chrome,opera,Firefox等就都不會這樣…

最後,當然session等超過server可接受的時間(一般是預設30分鐘),還是會失效的,因為Server上已經沒有保留你的session ID,拿原本的session ID當然沒有用了;不過cooike就不會啦~因為原生瀏覽器會把你當做還是在當次使用的。 

似乎這樣的資訊,在網路上好像沒啥人寫,希望上述資訊可以讓有同樣困擾的人不要和我白白花費這麼多時間在測試~XD

Categories: WebDesign Tags: , ,

Android SQLite更新資料庫作法

2012年7月7日 尚無評論

這次在先前製作的Android Apps 有需要進行SQLite資料庫的更新
以為系統能完美的自動更新~XD 但看來還是沒有想像中的聰明
這兩年新的技術及資訊一直出來,讓我覺得似乎什麼都好像已經包好似的

好~轉正題,當SQLite資料庫要更新時該怎麼做呢?
其實Android早就有想到了(其實也規劃的不錯啦)

首先,在你實作連結SQLite的物件之中有個版本號,當你有異動時就往後加一,就和Apps要更版一樣要加版本號

pubilc class DatabaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;

再來繼承SQLiteOpenHelper後,它提供了二個metohd,onCreate & onUpgrade 可以實作,我就擷錄人家寫的一段話來介紹這兩個method:

public void onCreate(SQLiteDatabase db)
這裡面的onCreate是指資料庫onCreate時,而不是DatabaseHelper的onCreate。也就是說,如果已經指定 database已經存在,那麼在重新運行程序的時候,就不會執行這個方法了。要不然,豈不是每次重新啟動程序都要重新建立一次資料庫了!在這個方法中,完成了資料庫的建立工作。也就是那個execSQL()方法。


public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
在程序的開發維護過程中,資料庫的結構可能會有變化,那麼這個方法就有用處了。在DatabaseHelper這個對象一建立時,就已經把參數 DATABASE_VERSION傳入,這樣,如果Android發現此版本與現有版本不一致,就會調用這個onUpgrate方法。於是,可以在這裡面實現一些數據的upgrade工作,比如說建立一個臨時表,將數據由臨時表中轉到新的表結構中。需要注意的是,這裡面的onUpgrade是在版本不一致時調用,也就是說不管當前需要的版本高於現有版本還是低於現有版本,都會出發這個方法,類似的這種情況,就需要對oldVersion和 newVersion進行判斷之後再決定使用什麼策略來更新數據。

所以就把你要異動資料庫的script 寫在onUpgrade裡,還可以依照舊版本號及新的版本號看要執行哪些script,相容性的設計都考量進去了

這樣當上傳到android play(market)後,當有人下載更新時就會去執行更新的script了~^^

參考連結:http://www.cnblogs.com/linzheng/archive/2011/01/22/1942087.html

Categories: Android Tags: , ,

Debug Certificate expired..Unknown Android Packaging Problem 解決辦法

2012年7月1日 尚無評論

在執行有一陣子沒弄的android專案時,發現出現了一個怪Error

Error generating final archive: Debug Certificate expired on 12-07-01 上午11:27 Test Unknown Android Packaging Problem

真是奇怪,怎麼高訴我測試的憑證過期了呢? 重新Build 只要執行時就還是一樣會出錯

去查了一下,有看到Google官方有解決辦法:

To fix this problem, simply delete the debug.keystore file. The default storage location for AVDs is in ~/.android/avd on OS X and Linux, in C:\Documents and Settings\\.android\ on Windows XP, and in C:\Users\\.android\ on Windows Vista.

The next time you build, the build tools will regenerate a new keystore and debug key

所以到了C:\Documents and Settings\Administrator\.android資料夾下把debug.keystore檔除後,然後重新build一下獲取新的debug.keystore。這樣新建專案執行時就正常了。

為啥會發生了…狀況不明,看來是太久沒寫android,要你常寫才可以啦~XD

Categories: Android Tags: ,

Android 如何取得版本資訊

2012年4月6日 尚無評論

第一次寫android的相關文章,就是要來寫如何取得android版本…=.=||

在AndroidManifest.xml文件中定義的android:versionCode和android:versionName





在我們上傳至Google Play(原market) 時,如要更版,則應要調整這兩個數字才有其作用
,在 AndroidManifest.xml 中的 android:versionCode 必須大於前一版本,否則會顯示更新程式失敗的警告。
還有在google play(market)上顯示的android:versionName,所以建議須一併修改android:versionName。

所以,在APP裡如也想顯示目前版本為何該怎麼做呢?
蠻容易的,只要參考以下程式碼即可取得

try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
int myVerCode = packageInfo.versionCode;
String myVerName = packageInfo.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}

呵~這個算是書上沒教的事…

Categories: Android Tags: ,