当前位置: 首页 > 面试题库 >

BroadcastReceiver未收到下载完成操作

程淮晨
2023-03-14
问题内容

我正在尝试捕获下载完成事件,但是我的BroadcastReceiver没有收到它们。这是接收者:

public class DownloadListenerService extends BroadcastReceiver {        
    @Override
    public void onReceive(final Context context, Intent intent) {
        System.out.println("got here");
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
        SharedPreferences.Editor editor = settings.edit();

        String action = intent.getAction();
        if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
            String downloadPath = intent.getStringExtra(DownloadManager.COLUMN_URI);
            editor.putString("downloadPath", downloadPath);
            editor.commit();
        }
    }
}

这是清单:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

    <receiver 
        android:name="com.example.alreadydownloaded.DownloadListenerService" 
        android:exported="true">
        <intent-filter>
            <action android:enabled="true" android:name="android.intent.action.DOWNLOAD_COMPLETE" />
        </intent-filter>
    </receiver>
 </application>

有人知道怎么了吗?


问题答案:
  • 为您的接收者使用完整的软件包名称,例如 com.example.DownloadListenerService
  • Add android:exported="true" BroadcastReceiver可以outside从其应用程序的来源接收消息。
  • 更改的名称Actionintent-filterandroid.intent.action.DOWNLOAD_COMPLETE
        <receiver 
        android:name="com.example.DownloadListenerService"
        android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
        </intent-filter>
    </receiver>
    <uses-permission android:name="android.permission.INTERNET" />
    

仅当从您的应用程序使用进行注册时,才会触发接收器 registerReceiver(@Nullable BroadcastReceiver receiver,IntentFilter filter);

要排队的代码下载:

DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("https://www.google.com/images/srpr/logo4w.png"));
dm.enqueue(request);


 类似资料:
  • 我在时遇到了奇怪的问题,下载成功了,但文件没有存储。 这是我的代码: 我的清单中也包含了。我尝试将目录更改为,但是文件仍然没有存储到downloads目录。我试图在上找到它,但下载的文件也不在那里。那么我的代码出了什么问题?

  • 我正在开发的一个应用程序允许用户自己读取确认短信的内容,输入验证码。对于使用早于Oreo(API 26)的操作系统的所有设备,BroadcastReceiver的实现工作正常,并允许正确接收SMS。在这个实现中,我的意思是将receiver对象放置在AndroidManifest中。 但是,从Oreo开始,必须显式地将BroadcastReceivers注册到适当的上下文。我对此执行如下: 在接收

  • 我正在我的项目中使用spring批处理spring集成sftp。我不希望在应用程序启动时触发下载。我希望下载过程在步骤1中触发,并在所有文件下载到本地后继续执行步骤2,不确定如何实现这一点

  • 我是Android Studio的新手,最后一天在我的mac上下载了它,但我永远无法使用它。组件下载即将结束,然后这个错误不断出现。请帮忙。我真的很想做我的项目。 警告:安装过程中发生错误:无法下载“https://dl.google.com/android/repository/android_m2repository_r30.zip”:读取超时,响应:200 OK 上述警告不断发生。

  • 我有几个单独的操作,我想以与JS中相同的风格链接这些操作。 所以目前我有这样的代码: 可以在一个链中重写吗?有点:

  • 本文向大家介绍Android BroadcastReceiver接收收到短信的广播,包括了Android BroadcastReceiver接收收到短信的广播的使用技巧和注意事项,需要的朋友参考一下 一、知识介绍   1、broadcastReceiver是广播接受者,四大组件之一。   2、Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息。   3、使用场景: