私は、アプリケーションの以前のバージョンが何であるかに基づいて私のアプリケーションのために実行したいアップデートを持っています。アンドロイドに置き換えられるアプリのバージョンを知るにはどうすればよいですか?
たとえば、ユーザーのバージョンが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;
}
}
}
私が間違っている場合は私を修正してください。しかし、このソリューションは、新しいアプリケーションをインストールする前にカスタムアプリケーションクラスを実行していないときに問題を解決しません。上記の例を使用すると、最初のインストールでlastVersionのバージョン7を確認しても、常にnullが返されます。 – DroidT
@ user1196031:ユーザーがバージョン6をインストールし、何も実行せずに7にアップグレードした場合、ユーザーは7を直接インストールした場合と同じポイントになります。したがって、実行する必要のあるアップグレードロジックはありません。 – CommonsWare
バージョン6はアップデートを自動的に実行しますが、アップデートを実行する前に6がすでにインストールされているかどうかを確認する必要があります。更新が2回実行されると、すべてが破損します。アップグレードが実行されたかどうかを確認する方法がないので、データベースのアップグレードを行うことでこれを済ませたはずです。私は、交換するソフトウェアのバージョンを知る方法がないと思いますか? – DroidT