Android 平台如何取得程式自身的版本?

來源:互聯網
上載者:User

    想必 99% 的程式都有一個 "About" 吧?這裡一般都會寫上程式名稱和版本號碼。要知道,AndroidManifest.xml 中也有版本號碼(Version Name),同樣的資訊在兩個地方出現,就引出了一個問題:如何在後續升級時保證二者同步?

    我首先想到的方法就是在 res/values/strings.xml 中定義一個 entry,比如

<string name="version_name">1.0</string>

,然後再在兩個地方引用這個字串 R.string.version_name 或 @string/version_name。當然,About UI 部分可以根據情況直接寫在 layout xml (後者)或代碼中(前者),但是 AndroidManifest.xml 只能使用後者。這樣版本號碼就只有一個定義,在 strings.xml 中,以後升級時修改這一個地方就可以了。這樣改完代碼後,編譯,運行,一切正常,我感到很欣慰。

    然而,很快問題就出現了:當我上傳這個程式到 Android Market 上時,系統提示 Version Name 無效!看來 Google 的 Android

Market 後台還不很成熟,這應該是一個 bug,我可以提交一個 issue,但是我的程式不能等到 Android Market 改完 bug 再發布吧?

    思考問題要靈活,既然 AndroidManifest.xml 中不能引用其他 xml 中的資源,那麼就讓版本號碼定義在它那裡,其他用到版本號碼的地方都想辦法取出來不就可以了!!問題化歸為:“如何在運行時取到程式自身的版本?”(之所以這裡強調“運行時”是因為我感覺 AndroidManisfest.xml 中的東西是無法通過類似 @string/abd 形式來引用的。如果你知道如何引用,請告訴我,謝謝!)。經過尋找文檔和 Google,最終找到答案:

PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 0);

PackageInfo 中包含了關於當前 package 的許多資訊(Version Number 當然也包含在其中了),另外 PackageManager.getPackageInfo() 的第二個參數也大有文章。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.