POC-在启动时启动服务,无需活动-Android 4+;

POC-在启动时启动服务,无需活动-Android 4+;,android,android-service,Android,Android Service,这个问题可能看起来很琐碎,但我一直在努力解决它 我正在尝试启动启动时启动服务,如果我从main活动(启动活动)至少启动一次,一切正常,例如: AndroidManifest.xml ... <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> ... <activity android:name="com.example.mainActivity" android:label="

这个问题可能看起来很琐碎,但我一直在努力解决它

我正在尝试启动启动时启动服务,如果我从
main活动
(启动活动)至少启动一次,一切正常,例如:

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"/>
...
mainActivity.java

...
startService(new Intent(getApplicationContext(), com.example.someService.class));
...
...
startService(new Intent(getApplicationContext(), com.example.someService.class));
...
有了上面的代码,我可以在每次启动后运行该服务,没有任何问题


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

有什么办法可以做到这一点吗?
当用户启动应用程序时,我可以从
AndroiManifest.xml
启动两个活动吗

如果我的问题不是100%清楚,我很抱歉,我已经尽力解释了,如果你不能理解,请在下面留言。Tks

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

实际上,安卓3.1帮助防止恶意软件驱动

有没有办法做到这一点

必须使用明确的
意图
在您的某个组件上调用某种形式的IPC,以使应用程序脱离所谓的“停止状态”,从而阻止您接收广播。因此,有些事情需要:

  • 通过明确的
    意图开始一项活动,或
  • 通过明确的
    意图启动一项服务,或
  • 通过明确的
    意图
(我不知道尝试连接到
ContentProvider
是否有效,尽管可以说它应该有效)

关键是明确的
意图
。这就是为什么从主屏幕启动器调用活动是有效的,因为用于启动活动的
Intent
是显式的

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

或者创建与默认启动器活动同时启动的新活动(不可见?)


我不知道你认为那会达到什么效果。如果用户启动您的启动程序活动,则您已脱离停止状态,将正常接收广播。

@MikeM。谢谢你的回复。我试图实现的是在用户安装后不运行活动的情况下启动服务。谢谢您的回复。作为POC,我不能将启动服务的意图添加到
mainActivity
,也不能更改其中的任何代码,但我可以创建启动服务的新活动。这就是为什么我问是否可以在启动时从
AndroidManifest.xml
启动2个活动。有可能吗?@PedroLobito:不,一个发射器图标不可能绑定到两个单独的活动。带有
MAIN
/
启动器的每个活动都有自己的启动器图标;该图标启动该唯一活动。此外,我看不出这与您声明的目标有什么关系(“在用户安装后不运行一次活动的情况下启动服务”)。如果我的问题混淆了,我很抱歉。由于我无法更改
mainActivity
中的代码来添加明确的
意图
,因此我认为可以创建一个新的活动来启动服务,该服务将与默认启动器活动同时启动(
mainActivity
)。多亏了你,我才意识到这是不可能的。我认为你的问题是正确的。谢谢你抽出时间。