Androidの開発に携わって、ぶつかった問題。
Androidアプリは自分で自分がアンインストールされることを検知できません。
パッケージが削除されるときに通知されるPACKAGE_REMOVEDというイベントがありますが、これを受信できるのは他のアプリです。
Javaで作るのでデストラクタがある訳でもなく、アンインストール時に解放したい値、初期化したい値があっても何もできないのです。
ただし、プリインストールアプリのアップデートの削除(アンインストール)を行う場合は、プリインストールアプリ側(古い方)でMY_PACKAGE_REPLACEDを9割くらいの確率で受信できてしまいます。
方法はマニフェストファイルにMY_PACKAGE_REPLACEDを登録して、BroadcastReceiverを継承したクラスで受信するだけです。
これは、Android Developerにも新しいアプリに更新した時に、としか書いていないことで驚きました。
なぜ9割くらいの確率でしか受信できないかは全く謎で、リカバリーもできないのでお勧めできませんが、興味のある方はその謎を調べて教えてください(私は調べませんので…)。
アプリのアンインストール時に何かしようというのは基本的に諦めましょう。
代替方法としては、
・アンインストール時は諦めて、プリインストールアプリの場合はアプリ更新時に通知されるMY_PACKAGE_REPLACEDを受け取るか、普通のアプリの場合はPACKAGE_ADDEDを受け取る。
・アンインストール時は諦めて、プリインストールアプリの場合はアンインストール後に再起動する手順を含めることとして、起動時に通知されるBOOT_COMPLETEDを受信する。
・どうしてもアンインストール時に行いたいのであれば、他のアプリを用意してアンインストール時に通知されるPACKAGE_REMOVEDを受信する。
くれぐれもAndroidアプリでアンインストール時に何かしようなんて仕様を書かないように!!(ダジャレじゃない!!)
コメント