【问题标题】:Starting an IntentService from FileObserver从 FileObserver 启动 IntentService
【发布时间】:2012-08-16 22:34:54
【问题描述】:

我正在编写一个使用 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 请求的文件。我知道这真的很复杂,但这确实是我目前唯一能做到的方法。

【问题讨论】:

    标签: java android android-intent intentservice fileobserver


    【解决方案1】:

    因为我在 FileObserver 的扩展中工作,所以没有可接受的上下文可以提供 Intent。

    这个FileObserver 不能存在于真空中。它需要由活动或服务管理,这将为您提供Context

    【讨论】:

    • @OsmiumUSA:说“看不到工作”并不能让事情变得更清楚。
    • @OsmiumUSA:“我尝试了很多情况,但都没有看到工作”——任何Context 都可以与startService() 一起使用。你的问题出在其他地方:startService() 没有被调用,或者你使用了错误的 IntentstartService() 并且忽略了被放入 LogCat 的警告,或者你的 IntentService 本身有错误,或者其他什么。
    【解决方案2】:

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

    sInstance = this;
    

    使用

    MyApplication.sInstance.startActivity(intent);
    

    编辑: 如果您需要做的只是启动服务而不从 FileObservver 传递任何信息,那么您可以使用 PendingIntent,您可以创建一个 PendingIntent 并在创建 FileObserver 时设置它并使用

    pendingintent.send()

    【讨论】:

    • FileObserver 将由服务启动。在那种情况下我会怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多