Sean's Note: 5月 2014

2014年5月13日 星期二

Can's see the newly created picture in Android's default gallery.

當我們寫了一個會儲存圖片在裝置上的 APP 時,卻在開啟 Android gallery 或其他專門
瀏覽圖片的 APP 時看不到圖片,是因為系統還沒將其掃進 MediaStore,想必如果系統
不斷的掃描檔案和操作資料庫是相當耗資源與沒有效率的。所以,Android 會在每次
開機時做一次掃描,如果 APP 想要系統對某個檔案做即時的掃描,可以加上下面的

程式碼:
MediaScannerConnection.scanFile(activity, new String[]{path}, null, 
    new MediaScannerConnection.OnScanCompletedListener() {
        @Override
        public void onScanCompleted(final String path, final Uri uri) {
           ...
        }
    }
); 

Ref: http://developer.android.com/reference/android/media/MediaScannerConnection.html

2014年5月10日 星期六

Launch Mode for Activity

Activity 的 launch mode 可以透過 android:launchMode 來設定,總共有四種 launch mode:
  1. standard
    這是 default 的 launch mode,Activity 每次都會建立一個新的實體。
    EX1: A -> B(standard),在 B 啟動 B,A -> B -> B。
    EX2: A(standard) -> B,返回上層,Activity A 會被重新建立。
  2. singleTop
    如果當下的 Activity 在 stack 的最上面,則不會建立新的實體,反之則會。
    EX1: A(singleTop) -> B -> C,在 C 啟動 A,A -> B -> C -> A。
    EX2: A(singleTop) -> B,返回上層,Activity A 不會被重新建立。
  3. singleTask
    不會建立新的實體,而且總是在 stack 中的最前頭(下層)。
    (Google 說總是在 stack 中的最前頭(下層) 也不全然正確)
    EX1: A -> B(singleTask) -> C -> D ,在 D 啟動 B,A -> B,C 和 D 會被移除。
  4. singleInstance
    不會建立新的實體,而且是 stack 中唯一的 Activity。
    EX1: A -> B -> C ,在 C 啟動 D(singleInstance),[A -> B -> C] -> [D]。

2014年5月1日 星期四

Android 4.4 behavior changes for read/write external storage

在 Android 4.4 之後,應用程式不再可以任意的寫入 SD 卡:
我寫了一個間單的應用程式 (com.example.test) 跑在 HP 平板(Android 4.4) 上做測試。
呼叫新的 API getExternalFilesDirs(null) 去要在 SD 卡上的私有儲存資料夾,
得到了路徑: /storage/sdcard1/Android/data/com.example.test/files
在這個資料夾下做了一些操作,發現有以下的行為:
  1. 我的 test app 可以對該資料夾寫入跟讀取。 
  2. 該資料夾下的檔案可以被電腦端或其它應用程式如 “ES File Explorer” 瀏覽到。
  3. “ES File Explorer” 不能移除該資料夾下的檔案。 (無法被其它應用程式修改)
  4. 電腦端可以移除該資料夾下的檔案。 (可以被電腦端修改)
  5. 當移除我的應用程式後,該資料夾也會被移除。
Read More: https://developer.android.com/about/versions/android-4.4.html#Behaviors