【问题标题】:Starting an Android init.rc service from an Activity从 Activity 启动 Android init.rc 服务
【发布时间】:2013-03-08 02:07:08
【问题描述】:

在我开始之前,这是针对我们自己的基于 android 的设备,而不是手机或其他地方的部署。

我们在 init.rc 中有一个服务,它是一个 postgresql 数据库服务器。这会在启动时启动,并且始终在系统的后台运行。但是它可能会关闭,我们希望有一种方法可以从系统的 android 端停止和启动此服务。

有没有办法从 android Activity 发送初始化启动命令?在 root shell 中,这相当于运行“start servicename”和“stop servicename”。

【问题讨论】:

    标签: android android-activity init


    【解决方案1】:

    要启动在 init.rc 文件中声明的服务,我认为您必须使用以下命令更改“ctl.start”系统属性:

    在c文件中:

    property_set("ctl.start", "<service_name>");
    

    在java中:

    SystemProperties.set("ctl.start", "<service_name>");
    

    这意味着您的活动具有系统权限(在清单中):

    android:sharedUserId="android.uid.system"
    

    并由您的系统密钥签名(或将平台放在 Android.mk 中)

    你可以猜到,要停止服务使用以下命令:

    property_set("ctl.stop", "<service_name>");
    

    SystemProperties.set("ctl.stop", "<service_name>");
    

    【讨论】:

    • 对不起,我直到现在才注意到这一点。 “将平台放在 Android.mk 中”是否仅适用于在 Android 上运行的 C 应用程序?对于 System 密钥,这是否意味着您必须为要部署它的每个系统单独构建 APK?
    • 我猜是系统密钥,这意味着如果我们想利用这种方法来启动我们的服务,我们需要实际为硬件构建整个android系统。我认为这会使它目前对我们的需求几乎无用,因为我们没有足够的硬件驱动程序来自己构建它,而且我们依靠 SoM 的制造商来构建它。不过感谢您的回答。我将与 SoM 的制造商核实,看看他们是否可以为我们提供包含驱动程序的更完整的构建树。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 2011-01-21
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多