我正在尝试使用Google的APK Expansion扩展程序下载我随其托管的扩展文件。我也使用SampleDownloadActivity中的代码执行此操作,虽然稍作修改以适合我的应用程序。
我的问题是永远不会启动下载。在我的实现IDownloadClient的类中,调用onStart(),但onServiceConnected()不是。
我已经在DownloaderClientMarshaller:
中追溯到这一行if( c.bindService(bindIntent, mConnection, Context.BIND_DEBUG_UNBIND) ) {
这总是返回false,因此服务没有绑定。
我正在使用TabHost中的调用活动,这会给其他人带来问题。他们说你不能传递TabHost上下文,而不是传递给connect函数的Application上下文。我通过这样做改变了这个:
mDownloaderClientStub.connect(getApplicationContext());
而不是:
mDownloaderClientStub.connect(this);
但它没有帮助,我仍然是假的。如果有所作为,我正在模拟器上进行所有测试。
我真的把头发拉出来了。如果有人有任何想法,我将非常感激!
答案 0 :(得分:1)
在大多数情况下,如果未在应用程序的Manifest文件中声明服务,class Test
{
public:
virtual int testCall() { return 0; };
static void* operator new(std::size_t);
};
class TestImpl : public Test
{
virtual int testCall() override
{
return i;
}
int i = 15;
};
void* Test::operator new(size_t sz)
{
return ::new TestImpl();
}
void main()
{
Test * t = new Test(); // Call the new operator, correctly
int i = test->testCall(); // i == 0 and not 15
}
方法将返回bindService()
。
在我的情况下,问题是我给了false
方法错误的类对象。我不小心使用了DownloaderClientMarshaller.CreateStub()
而不是DownloaderService.class
。
使用下载程序时,请确保传递扩展基础MyDownloaderService.class
的正确类对象。
我建议使用Better APK Expansion包中包含的更新的下载程序库。它解决了这个问题和其他问题,还提供了简化的API,最大限度地减少了自己射击脚的机会。
要接收下载进度,您只需要扩展DownloaderService
。
BroadcastDownloaderClient
查看图书馆page的完整文档。