3

我正在尝试使用 Google 的 APK 扩展扩展来下载我托管的扩展文件。我还使用 SampleDownloadActivity 中的代码来执行此操作,尽管稍作修改以适合我的应用程序。

我的问题是永远不会启动下载。在我实现 IDownloadClient 的类中,调用了 onStart(),但没有调用 onServiceConnected()。

我在 DownloaderClientMarshaller 中将其追溯到这一行:

if( c.bindService(bindIntent, mConnection, Context.BIND_DEBUG_UNBIND) ) {

这总是返回 false,因此服务未绑定。

我在 TabHost 中使用调用活动,这给其他人带来了问题。他们说您不能将 TabHost 上下文传递给连接函数,而不能将 Application 上下文传递给连接函数。我通过以下方式改变了这一点:

mDownloaderClientStub.connect(getApplicationContext());

代替:

mDownloaderClientStub.connect(this);

但这无济于事,我仍然是假的。如果这有所作为,我正在模拟器上进行所有测试。

我真的把头发拉出来了。如果有人有任何想法,我将非常感激!

4

1 回答 1

1

在大多数情况下,如果服务未在应用程序的清单文件中声明,则bindService()方法返回。false

就我而言,问题是我给该DownloaderClientMarshaller.CreateStub()方法提供了错误的类对象。我不小心使用DownloaderService.classMyDownloaderService.class.

使用下载器 API 时,请确保传递正确的扩展 base 的类对象DownloaderService

我建议使用Better APK 扩展包中包含的更新的下载器库。它修复了这个问题和其他问题,还提供了简化的 API,最大限度地减少了自己的脚射门机会。

要接收下载进度,您只需扩展BroadcastDownloaderClient.

public class SampleDownloaderActivity extends AppCompatActivity {
    private final DownloaderClient mClient = new DownloaderClient(this);

    // ...

    @Override 
    protected void onStart() {
        super.onStart();
        mClient.register(this);
    }

    @Override 
    protected void onStop() {
        mClient.unregister(this);
        super.onStop();
    }

    // ...

    class DownloaderClient extends BroadcastDownloaderClient {

        @Override 
        public void onDownloadStateChanged(int newState) {
            if (newState == STATE_COMPLETED) {
                // downloaded successfully...
            } else if (newState >= 15) {
                // failed
                int message = Helpers.getDownloaderStringResourceIDFromState(newState);
                Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
            } 
        }

        @Override 
        public void onDownloadProgress(DownloadProgressInfo progress) {
            if (progress.mOverallTotal > 0) {
                // receive the download progress
                // you can then display the progress in your activity
                String progress = Helpers.getDownloadProgressPercent(
                        progress.mOverallProgress, progress.mOverallTotal);
                Log.i("SampleDownloaderActivity", "downloading progress: " + progress);
            }
        }
    }

}

检查图书馆页面上的完整文档。

于 2017-07-28T14:08:54.797 回答