下载管理器广播接收器不工作



我一直在关注这个问题,但没有成功,基本上,我想在从任何来源下载或放入下载文件夹时收到通知,例如下载,通过计算机将其放在那里。问题是,我没有收到接收者的任何回复。这是我的代码:

public class DownloadReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Log.d("TAG", "SOMETHING DOWNLOADED");
    Toast.makeText(context, "SOMETHING DOWNLOADED", Toast.LENGTH_SHORT).show();
    long receivedID = intent.getLongExtra(
            DownloadManager.EXTRA_DOWNLOAD_ID, -1L);
    DownloadManager mgr = (DownloadManager)
            context.getSystemService(Context.DOWNLOAD_SERVICE);
    DownloadManager.Query query = new DownloadManager.Query();
    query.setFilterById(receivedID);
    Cursor cur = mgr.query(query);
    int index = cur.getColumnIndex(DownloadManager.COLUMN_STATUS);
    if(cur.moveToFirst()) {
        if(cur.getInt(index) == DownloadManager.STATUS_SUCCESSFUL){
            // do something
            Log.d("TAG", "SOMETHING DOWNLOADED");
            Toast.makeText(context, "SOMETHING DOWNLOADED", Toast.LENGTH_SHORT).show();
        }
    }
    cur.close();
}

这是我在应用程序文件中注册它的方式:

final IntentFilter downloadFilter = new IntentFilter();
downloadFilter.addAction("android.intent.action.DOWNLOAD_COMPLETE");
registerReceiver(new DownloadReceiver(),downloadFilter);

这是我的安卓清单:

<receiver android:name="com.tproductions.Openit.provider.DownloadReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.DOWNLOAD_COMPLETE" android:enabled="true" />
        </intent-filter>
    </receiver>

我在活动的onCreate((而不是清单中注册了广播接收器,它工作得很好。我知道这无关紧要,您也应该从清单方法接收广播。但是你可以试试我的方法,它可能会对你有所帮助。

这就是我创建广播类的方式:

public class DownloadManagerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    // Broadcast is Received
}

}

这就是我在活动中注册接收器的方式:

        // register the broadcast receiver
    DownloadManagerReceiver receiver = new DownloadManagerReceiver();
    context.registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

这称为动态声明,其他(使用清单(称为静态声明。您可以访问此链接了解更多详情。我希望它对你有所帮助。

最新更新