次の放送受信機があります。
public class UninstallReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
String action = intent.getAction();
Log.i("UninstallReceiver", "---------------------> onUNINSTALL():" + action);
DownloadManager dm = (DownloadManager) context.getSystemService(Activity.DOWNLOAD_SERVICE);
VideoDataDAO videosDao = VideoDataDAO.getInstance(context);
final List<VideoData> undownloaded_new_videos = videosDao.getUndownloadedVideosFromDB();
if (undownloaded_new_videos.size() > 0) {
long[] videos = new long[undownloaded_new_videos.size()];
for (int i = 0; i < undownloaded_new_videos.size(); i++) {
videos[i] = undownloaded_new_videos.get(i).getId();
Log.i("UninstallReceiver", "---------------------> onUNINSTALL():" + videos[i]);
}
if (videos != null) {
Log.i("UninstallReceiver", "---------------------> != null: " + Arrays.toString(videos));
dm.remove(videos);
}
}
final List<VideoData> redownloadVideos = videosDao.redownloadVideosFromDB();
if (redownloadVideos.size() > 0) {
long[] videos = new long[redownloadVideos.size()];
for (int i = 0; i < redownloadVideos.size(); i++) {
videos[i] = redownloadVideos.get(i).getId();
Log.i("UninstallReceiver", "---------------------> onUNINSTALL():" + videos[i]);
}
if (videos != null) {
Log.i("UninstallReceiver", "---------------------> != null2");
dm.remove(videos);
}
}
}
}
そして、それは私のマニフェストで次のように宣言されています:
<receiver android:name=".receivers.UninstallReceiver" >
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
今私の問題は、アプリケーションをアンインストールすると、ブロードキャストレシーバーが呼び出されず、アプリケーションが DownloadService を介してビデオをダウンロードし続けることです。アンインストールレシーバーを認識させるにはどうすればよいですか? 奇妙なことに、アンインストールする代わりに、既にインストールされているアプリの上に Eclipse からアプリをデプロイします (これにより、現在のアプリがアンインストールされ、新しい apk がアップロードされてインストールされます。これにより、アンインストール レシーバーが呼び出されます)。