2

アプリの以前のバージョンに基づいて、アプリに対して実行したい更新があります。

たとえば、ユーザーがバージョン 1 ~ 5 を使用していて、6 または 7 にアップグレードしている場合、更新を実行したいと考えています。また、6 から 7 にアップグレードしている場合は、更新を実行したくありません。

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

@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;
        }
    }
}
4

1 に答える 1

3

次のような以前のバージョンの情報を自分でどこかに保存する必要があります。

ステップ #1: カスタムApplicationクラスを作成し、マニフェスト (android:nameの属性<application>) で定義します。

ステップ #2:onCreate()カスタムApplicationクラスで、最後に実行したアプリのバージョン番号を含む永続的なデータ構造を読み取りますonCreate()。たとえば、 にlastVersion値を含めることができますSharedPreferences

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

ステップ #4: 現在のバージョンをその永続的なデータ構造に書き出します (たとえば、 を更新しますSharedPreferences)。

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

于 2012-05-07T00:04:16.300 に答える