Lal*_*ani 67 android android-widget android-emulator android-layout
在我的应用程序中,我没有任何UI部分,因此我需要在Device上安装Applicaton后立即启动服务.我看到很多链接,答案是不可能的,但我想这肯定是可能的.只需查看符合我要求的Android Market上的PlanB应用程序即可.下面是我的Manifest文件我是如何尝试的,但根本没有调用该服务.所以,让我知道在应用程序安装时启动服务的最佳方法是什么.
UPDATE
我也试过使用android.intent.action.PACKAGE_ADDED它可以很好地检测其他应用程序的包,但不适用于自己.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.auto.start"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:icon="@drawable/ic_launcher" >
<service android:name=".MyService">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</service>
<receiver android:name=".BootUpReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.PACKAGE_INSTALL" />
<action android:name="android.intent.action.PACKAGE_ADDED" />
<data android:scheme="package"/>
</intent-filter>
</receiver>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
Com*_*are 80
幸运的是,在XOOM和Galaxy Nexus上进行测试时,Plan B无法在Android 3.1+上运行.
Plan B所做的是利用驱逐恶意软件可能使用的安全漏洞,这正是Android阻止它再次发生的原因.
UPDATE
澄清:正如inazaruk发布并且我对其他答案发表评论,所有应用程序在安装时都处于"停止"状态.这与用户从"设置"应用程序强制停止应用程序后应用程序结束的状态相同.在处于"停止"状态时,除了手动启动活动外,应用程序不会以任何理由运行.值得注意的是,BroadcastReceviers在用户手动运行应用程序之前,无论他们注册了哪个事件,都不会调用no .
该块涵盖了远程安装和运行的Plan B场景,他们之前正在利用它们.毕竟,有了这个,任何拥有黑客谷歌帐户的人都有可能感染他们的设备,实际上是免提.
因此,当OP说:
我需要在Device上安装Applicaton后立即启动服务
OP将不成功,需要重新设计应用程序以避免这种所谓的"需要".
Jef*_*man 17
安装在/ system分区上的应用程序在安装后不会被置于"已停止"状态.如果你有root,你可以这样做,
$ adb root
$ adb remount
$ adb push your.apk /system/app
Run Code Online (Sandbox Code Playgroud)
它可以立即接收广播意图.这肯定不提供通用解决方案,但我想提及它的完整性.
编辑:请记住,不同版本的Android在不同的地方定位系统APK.例如,Android 8将它们放在/system/app//.apk下.将Shell封装到您的设备中,然后按照与其他系统APK相同的方案进行操作.
ina*_*ruk 14
我同意CommonsWare对问题的回答:如何在安装时启动android服务.换句话说,刚刚安装后,您无法自动启动服务.
关于较新的Android平台还有一件事:如果您根本没有UI,即使BOOT_COMPLETE在Android 3.1+上使用intent ,您也无法启动服务.
那是因为所有已安装的应用程序都处于停止状态.在此状态下,应用程序将不会收到任何广播通知.
为了激活您的应用程序,某些其他应用程序(或用户)需要启动您的服务或活动或内容提供商.通常的工作流程是用户点击应用程序的图标.
我在博文中写了详细的解释.
B计划通过收听系统中发生的事件来启动此功能.它使用一个接收器,它真正地听取了数百个事件,希望它们中的一些最终会启动.所以这就是你如何做到的.否则,安装后立即没有内置方法来启动应用程序.
我不确定你的约束/目的是什么,但如果你可以安装另一个有活动的应用程序,你可以让它发送一个带有FLAG_INCLUDE_STOPPED_PACKAGES标志的意图.
这将使用您的应用程序进行意图解析,即使它处于停止状态.如果intent的操作与您的某个过滤器匹配,它也会使程序包退出停止状态.
| 归档时间: |
|
| 查看次数: |
63222 次 |
| 最近记录: |