2012-05-06 22 views
1

私は、アプリケーションの以前のバージョンが何であるかに基づいて私のアプリケーションのために実行したいアップデートを持っています。アンドロイドに置き換えられるアプリのバージョンを知るにはどうすればよいですか?

たとえば、ユーザーのバージョンが1-5で、バージョンが6または7にアップグレードされている場合は、更新プログラムを実行します。また、私は6から7にアップグレードしている場合、更新プログラムを実行したくないです。

私はPACKAGE_REMOVEとPACKAGE_REPLACEインテントを受け入れるブロードキャストレシーバーを使用してこれを達成しようとしましたが、削除されるアプリに関する情報を私に教えてください。私は、同じバージョンを再インストールしない限り、PACKAGE_REMOVEDインテントを取得しません。インテントが受信される前に、デバッガとログプリントが捉えられないように見えるので、伝えるのは難しいです。何か案は?

ステップ#1:

@Override 
public void onReceive(Context context, Intent intent) { 
    if (isOccurUpdated) { 
     return; 
    } 
    if (action.equalsIgnoreCase("android.intent.action.PACKAGE_REPLACED")) { 
     String name = info.versionName; 
     // We are assuming that we didn't get down here if we have already 
     // done this update 
     Log.d(TAG,"We receive the REPLACE intent "+name); 
     if (name.contains(OCCUR_ID_UPDATE) || name.contains(OCCUR_ID_UPDATE_FIX)) { 
      dbh.occurIdUpdate(); 
     } 
    } else if (action.equalsIgnoreCase("android.intent.action.PACKAGE_REMOVED")) { 
     String name = info.versionName; 
     if (name.contains(OCCUR_ID_UPDATE)) { 
      isOccurUpdated = true; 
     } 
    } 
} 

答えて

2

は、次のような、どこかの以前のバージョンの情報を自分で保存する必要があるカスタムApplicationクラスを作成し、あなたのマニフェスト(<application>android:name属性)で定義します。

ステップ2:カスタムApplicationクラスのonCreate()では、最後にonCreate()が実行されたときのアプリケーションのバージョン番号を含むいくつかの永続データ構造を読み込みます。たとえば、SharedPreferencesにはlastVersionという値を設定できます。

ステップ3:最新バージョンが現在のバージョンよりも古い場合は、必要なアップグレードロジックを実行します。

ステップ#4:(例えば、SharedPreferencesを更新)その永続的なデータ構造体へのアウトあなたの現在のバージョンを書きます。

これがデータベースロジックに結びついている場合は、SQLiteOpenHelperがこれをすべて処理します。

+0

私が間違っている場合は私を修正してください。しかし、このソリューションは、新しいアプリケーションをインストールする前にカスタムアプリケーションクラスを実行していないときに問題を解決しません。上記の例を使用すると、最初のインストールでlastVersionのバージョン7を確認しても、常にnullが返されます。 – DroidT

+0

@ user1196031:ユーザーがバージョン6をインストールし、何も実行せずに7にアップグレードした場合、ユーザーは7を直接インストールした場合と同じポイントになります。したがって、実行する必要のあるアップグレードロジックはありません。 – CommonsWare

+0

バージョン6はアップデートを自動的に実行しますが、アップデートを実行する前に6がすでにインストールされているかどうかを確認する必要があります。更新が2回実行されると、すべてが破損します。アップグレードが実行されたかどうかを確認する方法がないので、データベースのアップグレードを行うことでこれを済ませたはずです。私は、交換するソフトウェアのバージョンを知る方法がないと思いますか? – DroidT

関連する問題