2013年2月20日水曜日

パッケージ情報の取得(PackageInfo, getPackageManager())

アプリのバージョン情報には2種類ありまして、

android:versionCode="1"

VersionCodeはGooglePlayに公開する際に使われます。
アプリの更新をする際には、1度公開したバージョンよりも
大きい数字を指定しないと更新できません。
また、この数字はユーザーには公開されません。

android:versionName="1.0"

VersionNameはGooglePlayや端末インストール後に
ユーザーが確認できるバージョンです。
アプリの更新時に必ず更新しないといけないわけではありません。
わりと自由に指定できます。

android:versionName="1.0.2"

とかもOKです。

VersionCodeはGoogle管理用
VersionNameは制作者管理用

という認識で問題ないかと思われます。

VersionNameは既にインストール済のユーザーに
最新版のアプリをインストールしてもらうために使えます。
バグが見つかった時とか。。

個人的にはサーバー側でアップデートさせるバージョンを管理して、
そのバージョンよりも、低かったら強制バージョンアップなアプリを作っています。

ではでは、

アプリのバージョン情報、最終更新日、最初にインストールした日付の取得してみましょう。



サンプル文はこんな感じです。

■サンプル
package com.example.Package;

import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Color;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //レイアウトの作成
        LinearLayout oLayout = new LinearLayout(getApplicationContext());
        //レイアウトにパーツを上から順に設置する設定
        oLayout.setOrientation(LinearLayout.VERTICAL);
        //文字を見やすくするために背景を黒色に
        oLayout.setBackgroundColor(Color.BLACK);
        //レイアウトの設定
        setContentView(oLayout);
  
        //レイアウトパラム定数(縦横の長さの定数)の格納
        int WC = ViewGroup.LayoutParams.WRAP_CONTENT;
        int MP = ViewGroup.LayoutParams.MATCH_PARENT;
        //レイアウトの横幅・縦幅を設定
        LayoutParams oLayPar = new LinearLayout.LayoutParams(MP, 40);
    
        try {
            //PackageInfoの取得
            PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_META_DATA);
            //パッケージのバージョンネームの取得
            String versionName    = packageInfo.versionName;
            //パッケージのバージョンコードの取得
            int versionCode       = packageInfo.versionCode;
            //最初にインストールした日付
            long firstInstallTime = packageInfo.firstInstallTime;
            //最後にインストールした日付
            long lastUpdateTime   = packageInfo.lastUpdateTime;
            //他のアプリと共有する場合のLinuxID
            String sharedUserId   = packageInfo.sharedUserId;
 
            //テキストビューを作成して、取得した情報を出力
            oLayout.addView(make_TextView("versionName = " + versionName), oLayPar);
            oLayout.addView(make_TextView("versionCode = " + versionCode), oLayPar);
            oLayout.addView(make_TextView("firstInstallTime = " + firstInstallTime), oLayPar);
            oLayout.addView(make_TextView("lastUpdateTime = " + lastUpdateTime), oLayPar);
            oLayout.addView(make_TextView("sharedUserId = " + sharedUserId), oLayPar);

        } catch (NameNotFoundException e) {
            //TODO 自動生成された catch ブロック
            e.printStackTrace();
        }
    }
 
    //テキストビューの作成
    private TextView make_TextView(String sMessage){
        //テキストビューの生成
        TextView tv = new TextView(getApplicationContext());
        //メッセージの設定
        tv.setText(sMessage);
        return tv;
    }

    //テキストビューの作成(long型用)
    private TextView make_TextView(long sMessage){
        return make_TextView(String.valueOf(sMessage));
    }
 
    //テキストビューの作成(int型用)
    private TextView make_TextView(int sMessage){
        return make_TextView(String.valueOf(sMessage));
    }
}
実行結果


このような感じになりました。

manifest.xmlと見比べて、正しいかの判定をお願いいたします。

Time系がよくわからない数字となっていますが、
これはUTCの表示のため。こうなっております。
1970年の1月1日から、どれだけ時間が経過しているかで、
時刻を管理しています。


oLayout.addView(make_TextView("firstInstallTime = " + new Date(firstInstallTime)), oLayPar);
oLayout.addView(make_TextView("lastUpdateTime = " + new Date(lastUpdateTime)), oLayPar);

Date型で囲めば


こんな感じで、先ほどよりもわかりやすくなったと思います。

0 件のコメント:

コメントを投稿