2015-11-11 73 views
-3

这个问题可能看起来很平凡,但我一直在努力。POC - 开机启动服务没有一个活动 - Android 4+

我想开机启动一个服务,如果我从mainActivity(发射活动)至少一次启动它的一切工作正常,像这样:

AndroidManifest.xml中

... 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
... 
<activity 
android:name="com.example.mainActivity" 
android:label="@string/app_name" > 
<intent-filter> 
<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 
</activity> 
<receiver android:name="com.example.bootReceiver" android:enabled="true" android:exported="false"> 
<intent-filter> 
<action android:name="android.intent.action.BOOT_COMPLETED"/> 
<action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
</intent-filter> 
</receiver> 
<service android:name="com.example.someService" android:enabled="true" android:exported="false"/> 
... 

bootReceiver.java

... 
startService(new Intent(getApplicationContext(), com.example.someService.class)); 
... 

mainActivity.java

... 
startService(new Intent(getApplicationContext(), com.example.someService.class)); 
... 

与上面的代码我能够运行没有任何问题每次启动后的服务。


作为POC,我想没有任何活动启动一个服务,或者至少没有mainActivity,只是通过声明对AndroidManifest.xml服务或通过创建新的活动(看不见? ),它与默认启动器活动同时启动。 据我所知,由于安全原因,这在android 3+(4+?)上是不可能的。

有什么办法可以达到这个目的吗?
当用户启动应用程序时,我可以从AndroiManifest.xml开始2个活动吗?

对不起,如果我的问题不是100%清楚,我已尽力解释它,如果你不明白,请留下评论以下。韩国社交协会。

+1

@MikeM。谢谢您的回复。我试图实现的是启动服务**,无需用户在安装后运行一次活动**。 –

回答

2

据我所知,由于安全原因,这在android 3+(4+?)上是不可能的。

实际上,Android 3.1有助于防止恶意软件驱动。

有什么办法可以达到这个目的吗?

事情已经使用显式Intent援引某种形式的IPC对您的组件之一,移动应用程序在所谓的“停止状态”,即阻止您接收广播的。那么,有什么需要可以:

  • 通过显式Intent开始你的活动之一,或
  • 通过显式Intent启动您的服务之一,或
  • 通过发送广播到您的接收机之一明确Intent

(我不知道,如果试图连接到一个ContentProvider会工作,虽然它无疑应该)

关键是明确的Intent。这就是为什么从主屏幕启动器调用活动的原因,因为用于启动活动的Intent将是明确的。

但是,如果没有这样的活动,您需要找到其他可以使用明确的Intent来调用其中一个组件的其他内容。如果用户通过系统设置应用程序激活该应用程序的功能,某些专用服务(例如,输入法)可能会被调用,并带有明确的Intent。如果您是某个其他应用的插件,那么其他应用可能会使用明确的Intent来处理您的某个组件。您可以要求用户安装Android SDK,了解如何使用命令行,并调用adb shell am命令来启动其中一个组件。这就是我能想到的一切。没有一个是完全通用的解决方案

或创建新的活动(看不见?)是在同一时间推出,默认的启动活动

我不知道你认为会实现。如果用户启动启动器活动,则表明您已经处于停止状态,并将正常接收广播。

+0

谢谢你的回复。作为POC,我**不能将启动服务**的意图添加到'mainActivity',或者更改其中的任何代码,但是我可以创建一个启动服务的新活动。这就是为什么我问在启动时是否可以从'AndroidManifest.xml'启动2个活动的原因。可能吗? –

+1

@PedroLobito:不,单个发射器图标不可能绑定到两个单独的活动。每个使用'MAIN' /'LAUNCHER'' '的活动都有它自己的启动器图标;该图标启动该唯一的活动。此外,我没有看到这与您所陈述的目标有什么关系(“在安装后没有用户运行一次活动的情况下启动服务”)。 – CommonsWare

+0

如果我的问题很混淆,我很抱歉。由于我无法更改'mainActivity'中的代码来添加显式的'Intent',我想我可以创建一个新的活动来启动将在默认启动器活动('mainActivity' )。感谢你,我意识到这是不可能的。我会将你的问题标记为正确的。感谢您的时间。 –