【Android】プリインストールアプリのアップデートの削除(アンインストール)時のイベント

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アプリでアンインストール時に何かしようなんて仕様を書かないように!!(ダジャレじゃない!!)

コメント

タイトルとURLをコピーしました