Android DownloadManager始终在AVD中挂起

问题描述

我的应用程序使用DownloadManager下载文件,它在我的真实手机中完美运行。

但是,下载始终在AVD中处于挂起状态,永远不会开始下载。

我正在使用Android Studio 4.0.1,并且我已经创建了多个AVD,但它们都不起作用。

在AVD中,可以进行Web浏览,因此网络应该没有问题。

除了我自己的应用程序外,我还尝试了github上的几个DownloadManager演示,但都无法在AVD中使用。

请帮助。

 class MainActivity : AppCompatActivity() {

    private val TAG = "MY"
    private var enqueue: Long = 0
    private lateinit var dm: DownloadManager

    inner class MyReceiver: BroadcastReceiver() {

        override fun onReceive(context: Context,intent:Intent) {

            Log.d(TAG,"Received.")
            val action = intent.getAction()
            if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
                val downloadId = intent.getLongExtra(
                        DownloadManager.EXTRA_DOWNLOAD_ID,0);
                val query = DownloadManager.Query();
                query.setFilterById(enqueue);
                val c = dm.query(query);
                if (c.moveToFirst()) {
                    val columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
                    if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {

                        val view =  findViewById<ImageView>(R.id.imageView1)
                        val uriString = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
                        view.setImageURI(Uri.parse(uriString));
                    }
                }
            }
            if (DownloadManager.ACTION_NOTIFICATION_CLICKED.equals(action)) {
                Log.d(TAG,"clicked")
            }
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val receiver = MyReceiver()

        val f = IntentFilter()
        f.addAction( DownloadManager.ACTION_DOWNLOAD_COMPLETE)
        f.addAction( ACTION_NOTIFICATION_CLICKED)
        
        registerReceiver(receiver,f)

        btDownload.setOnClickListener {
            onClick(it)
        }
    }

     fun onClick(view: View) {
        dm =  getSystemService(DOWNLOAD_SERVICE) as DownloadManager ;

      
        val request = DownloadManager.Request(
                Uri.parse("http://www.example.com/abd3234dfdfwefwef.pdf"));
        enqueue = dm.enqueue(request);
      

    }

 
}

解决方法

我自己解决了这个问题。

在Android Studio(当前为4.0.1)中,如果AVD图像为api v26 +,则必须将允许的网络类型设置为DownloadManager.Request.NETWORK_WIFI

但这两个不起作用:

DownloadManager.Request.NETWORK_WIFI

and

DownloadManager.Request.NETWORK_WIFI + DownloadManager.Request.NETWORK_MOBILE 

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...