2012-08-16 71 views
0

我正在编写一个应用程序,它使用android中的fileobserver。当我的文件被修改(创建等)时,它应该上传。为了实现一个队列并通过使用线程等避免内存不足,我希望使用IntentService一次上传一个文件,并在失败时保持执行状态,以便当用户重新获得连接时,上传。但现在的问题是:从FileObserver启动IntentService

所有意图给定的构造函数...

Intent(); 
Intent(Intent); 
Intent(String); 
Intent(Context, Class<?>); //The one I always use 
Intent(String, Uri); 
Intent(String, Uri, Context, Class<?>); 

...不会工作。由于我在FileObserver的扩展中工作,没有可接受的上下文来提供Intent。无论如何,我可以只使用字符串一来启动IntentService?我不需要它来返回任何东西,我只需要为它提供几个字符串以便工作(文件名等)或者有另一种方法可以启动IntentService。这一个真的让我难住。

感谢您的高级帮助!

编辑:好的。我已经尝试了很多上下文,但都看不到工作。 intent服务不会被应用程序或基类上下文从被调用时通过构造函数传递的服务类发起。这里是我的应用程序的基本布局:

登录活动进入菜单活动,菜单活动启动服务,服务启动服务处理程序(请参阅android文档中的服务示例,了解它是什么)并传递上下文通过构造函数。服务处理程序启动FileSync并通过构造函数传递上下文。 FileSync保存到类变量的上下文中。然后FileSync会等待文件被修改,然后使用上下文来启动IntentService以通过Intent上传文件。我知道这真的很复杂,但目前我只能这样做。

回答

1

您可以通过覆盖应用程序来创建应用程序的静态字段。在OnCreate中

sInstance = this; 

使用

MyApplication.sInstance.startActivity(intent); 

编辑: 关于第二个想法,你可以使用的PendingIntent如果你需要做的就是不从FileObservver传递任何信息,启动一个服务,你可以创建一个PendingIntent和它设置在创建FileObserver的时间和使用

pendingintent.send()

+0

FileObserver将由服务启动。在那种情况下我会做什么? – 2012-08-16 22:53:47

2

由于我在FileObserver的扩展中工作,没有可接受的上下文来提供Intent。

这个FileObserver不能存在于真空中。它需要由一项活动或服务来管理,并且这会给你你的Context

+0

我增加了更多信息以使自己更清楚。 – 2012-08-17 12:27:55

+0

@OsmiumUSA:说“没有人愿意工作”并没有让事情变得更清楚。 – CommonsWare 2012-08-17 12:52:38

+0

增加了更多。更好? – 2012-08-17 20:24:59