我正在编写一个在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。无论如何我只能使用String one来启动IntentService吗?我不需要它返回任何东西,我只需要为它提供一些字符串就可以工作(文件名等)或者是否有另一种方法可以启动IntentService。这个真让我难过。
感谢先进的任何帮助!
编辑:好的。我尝试了许多背景但没有人看到工作。意图服务不会被调用时通过构造函数传递的服务类的应用程序或基本上下文触发。这是我的应用程序的基本布局:
登录活动转到菜单活动,菜单活动启动服务,服务启动服务处理程序(请参阅android文档中的服务示例以查看它是什么)并通过构造函数传递上下文。 Service Handler启动FileSync并通过构造函数传递上下文。 FileSync保留在类变量中的上下文中。 FileSync然后等待直到修改文件,然后使用上下文启动IntentService以上载通过Intent请求的文件。我知道它真的很复杂,但它确实是我现在能做到的唯一方法。
答案 0 :(得分:2)
因为我在FileObserver的扩展中工作,所以没有可接受的上下文,我可以从中提供Intent。
这个FileObserver
不能存在于真空中。它需要由活动或服务管理,这将为您提供Context
。
答案 1 :(得分:1)
您可以通过覆盖Application来创建Application的静态字段。在oncreate
sInstance = this;
使用
MyApplication.sInstance.startActivity(intent);
编辑: 第二个想法是你可以使用PendingIntent,如果你需要做的就是在没有从FileObservver传递任何信息的情况下启动服务,你可以创建一个PendingIntent并在创建FileObserver时设置它并使用