开机启动服务的关键点是,当android启动完毕后,android会广播一次android.intent.action.BOOT_COMPLETED。如果想在启动后执行自己的代码,需要编写一个广播的接收者,并且注册接收者到这个广播intent上。
这里以android中使用定时任务代码为例,将它的服务改为开机启动。
首先,需要编写一个intent的receiver,比如SmsServiceBootReceiver:
package com.easymorse;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class SmsServiceBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent myIntent = new Intent();
myIntent.setAction(“com.easymorse.SmsService”);
context.startService(myIntent);
}
}
通过这个Receiver,启动SmsService。那么怎么让这个Receiver工作呢,需要把它注册到android系统上,去监听广播的BOOT_COMPLETED intent。在AndroidManifest.xml中:
<?xml version=”1.0″ encoding=”utf-8″?>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
package=”com.easymorse” android:versionCode=”1″ android:versionName=”1.0″>
<application android:icon=”@drawable/icon” android:label=”@string/app_name”>
<activity android:name=”.SmsServiceOptions” android:label=”@string/app_name”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
<service android:name=”.SmsService”>
<intent-filter>
<action android:name=”com.easymorse.SmsService”></action>
</intent-filter>
</service>
<receiver android:name=”SmsServiceBootReceiver”>
<intent-filter>
<action android:name=”android.intent.action.BOOT_COMPLETED”></action>
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion=”3″ />
</manifest>
增加黑体字部分的内容即可。
这样重新开机,服务在开机android系统启动完毕后就会加载。再启动Activity绑定(binding)服务,就可以操作SmsService服务,如果Activity解除绑定,也不会shutdown服务了。
是不是Service会有一个引用计数呢?当计数是0的时候就会shutdown。还要再找时间研究。
源代码见:
http://easymorse.googlecode.com/svn/tags/android.service.start.after.b
分享到:
相关推荐
总结起来,要在Android上实现开机自启动和后台运行,你需要创建一个服务,一个广播接收器,并处理好权限问题。同时,考虑到Android系统的电源管理特性,你可能还需要采用适当的策略来保证服务在后台的持续运行。请...
当我们的应用接收到这个广播时,就可以执行相应的操作,如启动服务或者启动主Activity,达到开机自启动的效果。 二、创建广播接收器 1. 首先,我们需要创建一个继承自BroadcastReceiver的类,例如命名为`...
标题中的"Delphi EX10 Android 实现开机自启动"是指使用Embarcadero Delphi XE10(也称为 RAD Studio XE10)开发的Android应用程序,目的是使其能够在设备启动时自动运行。这个过程涉及到Android系统的权限管理和...
4. **注意事项**: 自启动服务可能会消耗电池,因此在Android 8.0(API级别26)及以上版本,系统对后台服务进行了严格的限制。开发者需要考虑使用JobScheduler、WorkManager等工具来合理安排后台任务,以遵循电池优化...
二、实现开机自启动的步骤 1. 创建BroadcastReceiver: 首先,你需要创建一个继承自BroadcastReceiver的类,例如命名为AutoRunReceiver,并重写onReceive()方法。在这个方法中,你可以编写启动应用或服务的代码。 `...
为了实现开机启动服务,BroadcastReceiver需要在`onReceive()`方法中启动Service。这通常通过调用`startService()`方法完成,传入Service的Intent来启动服务。Service启动后,会在后台执行其`onStartCommand()`方法...
Android 11.0 开机启动流程介绍 本文档对 Android 11.0 平台开机启动流程进行了详细的介绍,涵盖了 Android 架构图、系统启动流程、init 启动流程、Zygote 启动流程、System Server 启动流程等关键部分。 Android ...
"BOOT_COMPLETED"是Android中一个重要的广播接收器事件,它标志着系统启动已经完成,可以安全地启动服务和执行其他资源密集型任务。 1. Android广播系统: Android系统采用广播机制来传播全局事件,如系统启动完成...
在Android系统中,开机启动服务(Boot Completed Service)是一种特殊的服务类型,它可以在设备完成启动后自动启动,以便执行特定的任务,例如后台录音。这里我们将深入探讨如何实现Android开机启动服务以及后台录音...
本文实例讲述了Android实现开机自动启动Service或app的方法。分享给大家供大家参考,具体如下: 第一步:首先创建一个广播接收者,重构其抽象方法 onReceive(Context context, Intent intent),在其中启动你想要启动...
以下将详细介绍如何利用Android的广播接收器实现开机自启动。 首先,我们需要理解什么是广播接收器(BroadcastReceiver)。在Android中,广播接收器是一种轻量级组件,它可以监听系统或应用发送的广播Intent,并在...
在Android系统中,实现应用的开机启动功能是开发者经常遇到的需求,这通常涉及到服务(Service)、广播接收器(BroadcastReceiver)以及系统权限的配置。下面将详细解释如何在Android中实现这一功能。 首先,我们...
还是做成一个 apk 吧,暂定只写一个 service 并开机自动启用,无 activity 的。 Java 中调用 native 程序我选择使用 JNI 方式,直接在 JNI_OnLoad 方法中调用 pthread_create 创建个线程跑原来的 main 就行啦。 ...
// 在这里执行你的启动操作,如启动服务或打开主界面 startService(context, YourService.class); } } private void startService(Context context, Class<? extends Service> serviceClass) { Intent ...
在Android系统中,实现开机自启动服务是一项常见的需求,它使得应用能够在用户开机后自动运行特定的任务,如数据同步、消息推送等。本篇将详细讲解如何创建并配置开机自启动服务。 首先,我们需要理解`android....
在Delphi环境下开发...这些文件共同构成了一个完整的Delphi Android应用项目,其中`Unit1.pas`和`Unit1.fmx`是实现开机启动的关键部分。通过以上步骤,你可以理解如何在Delphi环境中编写和实现Android开机启动功能。
Android应用程序可以实现开机时启动相关应用 如service等 Android系统在开机启动时会发出一个系统广播"android intent action BOOT COMPLETED" 在接收到这个广播就可以实现开机自启动功能 下面就是一个...
- 需要考虑到电池效率和用户体验,避免无节制地使用开机启动服务,因为这可能会消耗大量资源。 - 从Android 8.0(API 级别26)开始,后台服务的启动受到限制,因此在这些版本上,你可能需要使用JobScheduler或...