Android:bindService总是返回false(扩展APK api)

时间:2012-07-24 12:46:23

标签: android android-service android-service-binding apk-expansion-files

我正在尝试使用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);

但它没有帮助,我仍然是假的。如果有所作为,我正在模拟器上进行所有测试。

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

1 个答案:

答案 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的完整文档。