繁体   English   中英

卸载后如何停止DownloadManager? Package_removed的广播接收器不起作用

[英]How can I stop a DownloadManager after uninstall? Broadcast receiver for Package_removed doesn't work

我有以下广播接收器:

 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并安装它,这将称为卸载Receiver)。

我把这个:

 <uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" />

但是随后我不得不更改皮棉设置,以将其声明为警告而不是错误的方式,这样我才能构建该应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM