0

我正在编写一个使用 android 中的 fileobserver 的应用程序。当我以任何方式修改文件(创建等)时,它应该上传。为了实现一个队列并通过使用线程等来避免内存不足,我想使用一个 IntentService 一次上传一个文件,并在它失败时不执行,这样当用户重新连接时,它上传。但问题是:

Intent 的所有给定构造函数...

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。这个真的让我难住了。

感谢您在高级方面的任何帮助!

编辑:好的。我尝试了很多情况,但都没有看到工作。意图服务不会被应用程序或来自服务类的基本上下文触发,这些服务类在调用它们时通过构造函数传递。这是我的应用程序的基本布局:

Login Activity 转到 Menu Activity,Menu Activity 启动 Service,Service 启动 Service Handler(请参阅 android 文档中的服务示例以了解它是什么)并通过构造函数传递上下文。Service Handler 启动 FileSync 并通过构造函数传递上下文。FileSync 将上下文保存在类变量中。FileSync 然后等待文件被修改,然后使用上下文启动 IntentService 以上传通过 Intent 请求的文件。我知道这真的很复杂,但这确实是我目前唯一能做到的方法。

4

2 回答 2

2

Because I'm working in an extension of FileObserver, there is no acceptable context from which I can feed the Intent.

This FileObserver cannot exist in a vacuum. It needs to be managed by an activity or service, and that will give you your Context.

于 2012-08-16T22:42:26.510 回答
1

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

sInstance = this;

采用

MyApplication.sInstance.startActivity(intent);

Edit: On second thought you could use PendingIntent if all you need to do is start a service without passing any information from FileObservver, you can create a PendingIntent and set it at the time of creation of FileObserver and use

pendingintent.send()

于 2012-08-16T22:38:58.613 回答