我一直在关注这个问题,但没有成功,基本上,我想在从任何来源下载或放入下载文件夹时收到通知,例如下载,通过计算机将其放在那里。问题是,我没有收到接收者的任何回复。这是我的代码:
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));
这称为动态声明,其他(使用清单(称为静态声明。您可以访问此链接了解更多详情。我希望它对你有所帮助。