来自服务的 Android StartActivtyForResult()

标签 android architecture android-service

首先,我很抱歉我的英语不太好:)。

我在开发我的应用程序时遇到了问题。

这是我的解决方案的总体架构方案。

http://i.stack.imgur.com/ooTmE.png

为了快速起见,应用程序必须解码裸代码,但有两种可能的方式:

  1. 使用外部设备(构造函数提供一个包含 android 服务的 sdk 与设备通信),
  2. 使用 Zxing 库使用手机摄像头,可以有意地管理它。

我自己的服务的目标是管理一些业务代码并为用户透明地选择工具。

我认为这是一个很好的解决方案,但我想实现它,但我遇到了不同的问题。

我的主要问题是我无法在服务内部执行 StartActivityForResult。

是否有人对我的问题有任何建议,无论是架构更改还是主要问题的解决方案?


@Laurent':您完全正确,我的服务充当 API 适配器。

我会尽量使预期的行为更加清晰。

我有一个应用需要识别顶部有二维码的(真实)物体。在应用程序的生命周期中,用户将多次执行此识别操作。

用户通过点击按钮选择启动识别(或者以其他方式但他知道识别将开始)。因此不需要通知。

问题是他没有选择识别方式。这就是为什么,如您所说,我实现了一个适配器。

适配器选择:

相机移动或外部设备。第一个是来自 Zxing 图书馆的 Activity 。第二个是管理外部设备的服务。该服务提供了一个返回结果的接口(interface)。

还有一件事,我需要我的整个实现(适配器和 co)可以被其他也需要进行识别的应用程序重复使用。

所以我的想法是实现一个服务作为适配器来回答我的两个条件(使用户的选择透明 - 并使其他应用程序可以识别)。

我希望你理解我的问题。

最佳答案

鉴于您的架构,您的 MyOwnService 必须充当 API 适配器:它应该提供统一的扫描 API 并透明地处理每个外部服务的特殊性。

您的预期行为不够明确,无法提供满足您需求的解决方案,但这里有一些评论可能会有所帮助。

被动扫描:

  • 即使有一些解决方法:不应从服务启动任何 Activity (不是直接)。绝不。坏的。服务是后台的东西,它们最多被允许使用 Notifications提示用户。 (这是贾斯汀出色回答的第 2 点)。

因此,没有什么是“弹出式 Activity ”(这很好!)。如果您需要持续扫描条形码,即使您的 Activity 未运行,那么警告用户的唯一方法是使用状态栏通知。

主动扫描:

  • 在您自己的 Activity 中,您可以绑定(bind) 到您的包装器服务并使其开始扫描代码栏。当它找到一个时,它必须消息您的 Activity 。您的 Activity 消息处理程序 拥有对 UI 的完全访问权限,可以将您的发现通知用户。

您在编辑中选择了主动扫描,因此您的问题是找到一种方法让您的服务主动通知您的主应用程序(开始主动扫描的应用程序) ) 新项目已成功扫描。

你不能通过开始一个新的 Activity 来做到这一点(记住:这是不好的)但是你可以bind到一个服务和/或在包装服务之间使用Messages和应用程序。

我建议您花时间阅读(并花更多时间来理解)this android developer article on BoundServices尤其是关于 Messengers 的部分.

可以在以下 android 示例中找到服务和 Activity 之间双向消息传递的完整示例:Service & Activity

警告:设计健壮、成熟的基于 AIDL 的服务是一项艰巨的工作。

关于来自服务的 Android StartActivtyForResult(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7611729/

相关文章:

android - 无效的用户数据异常 - Android

android - 是否可以使用adb协议(protocol)从android手机发送短信

android - 使用 startForeground() 调用的多个前台服务的单个通知

android - 应用程序终止时从 Activity 调用方法到服务

android - BroadcastReceiver 检测屏幕开/关和服务不工作

Android 从 drawable 创建文件

java - 如何禁用推送通知的声音?

nhibernate - 继承上的组合 - 额外的属性去哪里了?

asp.net-mvc - 如何保护用户上传的文件

Hibernate/JPA 的 Java 配置?